2162 double NONCONSERVATIVE_FORM = args.
scalar<
double>(
"NONCONSERVATIVE_FORM");
2163 double MOMENTUM_SGE = args.
scalar<
double>(
"MOMENTUM_SGE");
2164 double PRESSURE_SGE = args.
scalar<
double>(
"PRESSURE_SGE");
2165 double VELOCITY_SGE = args.
scalar<
double>(
"VELOCITY_SGE");
2166 double PRESSURE_PROJECTION_STABILIZATION = args.
scalar<
double>(
"PRESSURE_PROJECTION_STABILIZATION");
2167 xt::pyarray<double>& numerical_viscosity = args.
array<
double>(
"numerical_viscosity");
2168 xt::pyarray<double>& mesh_trial_ref = args.
array<
double>(
"mesh_trial_ref");
2169 xt::pyarray<double>& mesh_grad_trial_ref = args.
array<
double>(
"mesh_grad_trial_ref");
2170 xt::pyarray<double>& mesh_dof = args.
array<
double>(
"mesh_dof");
2171 xt::pyarray<double>& mesh_velocity_dof = args.
array<
double>(
"mesh_velocity_dof");
2172 double MOVING_DOMAIN = args.
scalar<
double>(
"MOVING_DOMAIN");
2173 xt::pyarray<int>& mesh_l2g = args.
array<
int>(
"mesh_l2g");
2174 xt::pyarray<double>& x_ref = args.
array<
double>(
"x_ref");
2175 xt::pyarray<double>& dV_ref = args.
array<
double>(
"dV_ref");
2176 xt::pyarray<double>& p_trial_ref = args.
array<
double>(
"p_trial_ref");
2177 xt::pyarray<double>& p_grad_trial_ref = args.
array<
double>(
"p_grad_trial_ref");
2178 xt::pyarray<double>& p_test_ref = args.
array<
double>(
"p_test_ref");
2179 xt::pyarray<double>& p_grad_test_ref = args.
array<
double>(
"p_grad_test_ref");
2180 xt::pyarray<double>& vel_trial_ref = args.
array<
double>(
"vel_trial_ref");
2181 xt::pyarray<double>& vel_grad_trial_ref = args.
array<
double>(
"vel_grad_trial_ref");
2182 xt::pyarray<double>& vel_test_ref = args.
array<
double>(
"vel_test_ref");
2183 xt::pyarray<double>& vel_grad_test_ref = args.
array<
double>(
"vel_grad_test_ref");
2184 xt::pyarray<double>& mesh_trial_trace_ref = args.
array<
double>(
"mesh_trial_trace_ref");
2185 xt::pyarray<double>& mesh_grad_trial_trace_ref = args.
array<
double>(
"mesh_grad_trial_trace_ref");
2186 xt::pyarray<double>& xb_ref = args.
array<
double>(
"xb_ref");
2187 xt::pyarray<double>& dS_ref = args.
array<
double>(
"dS_ref");
2188 xt::pyarray<double>& p_trial_trace_ref = args.
array<
double>(
"p_trial_trace_ref");
2189 xt::pyarray<double>& p_grad_trial_trace_ref = args.
array<
double>(
"p_grad_trial_trace_ref");
2190 xt::pyarray<double>& p_test_trace_ref = args.
array<
double>(
"p_test_trace_ref");
2191 xt::pyarray<double>& p_grad_test_trace_ref = args.
array<
double>(
"p_grad_test_trace_ref");
2192 xt::pyarray<double>& vel_trial_trace_ref = args.
array<
double>(
"vel_trial_trace_ref");
2193 xt::pyarray<double>& vel_grad_trial_trace_ref = args.
array<
double>(
"vel_grad_trial_trace_ref");
2194 xt::pyarray<double>& vel_test_trace_ref = args.
array<
double>(
"vel_test_trace_ref");
2195 xt::pyarray<double>& vel_grad_test_trace_ref = args.
array<
double>(
"vel_grad_test_trace_ref");
2196 xt::pyarray<double>& normal_ref = args.
array<
double>(
"normal_ref");
2197 xt::pyarray<double>& boundaryJac_ref = args.
array<
double>(
"boundaryJac_ref");
2198 double eb_adjoint_sigma = args.
scalar<
double>(
"eb_adjoint_sigma");
2199 xt::pyarray<double>& elementDiameter = args.
array<
double>(
"elementDiameter");
2200 xt::pyarray<double>& elementBoundaryDiameter = args.
array<
double>(
"elementBoundaryDiameter");
2201 xt::pyarray<double>& nodeDiametersArray = args.
array<
double>(
"nodeDiametersArray");
2202 double hFactor = args.
scalar<
double>(
"hFactor");
2203 int nElements_global = args.
scalar<
int>(
"nElements_global");
2204 int nElementBoundaries_owned = args.
scalar<
int>(
"nElementBoundaries_owned");
2205 double useRBLES = args.
scalar<
double>(
"useRBLES");
2206 double useMetrics = args.
scalar<
double>(
"useMetrics");
2207 double alphaBDF = args.
scalar<
double>(
"alphaBDF");
2208 double epsFact_rho = args.
scalar<
double>(
"epsFact_rho");
2209 double epsFact_mu = args.
scalar<
double>(
"epsFact_mu");
2210 double sigma = args.
scalar<
double>(
"sigma");
2215 double smagorinskyConstant = args.
scalar<
double>(
"smagorinskyConstant");
2216 int turbulenceClosureModel = args.
scalar<
int>(
"turbulenceClosureModel");
2217 double Ct_sge = args.
scalar<
double>(
"Ct_sge");
2218 double Cd_sge = args.
scalar<
double>(
"Cd_sge");
2219 double C_dc = args.
scalar<
double>(
"C_dc");
2220 double C_b = args.
scalar<
double>(
"C_b");
2221 const xt::pyarray<double>& eps_solid = args.
array<
double>(
"eps_solid");
2222 xt::pyarray<double>& phi_solid = args.
array<
double>(
"phi_solid");
2223 const xt::pyarray<double>& eps_porous = args.
array<
double>(
"eps_porous");
2224 xt::pyarray<double>& phi_porous = args.
array<
double>(
"phi_porous");
2225 const xt::pyarray<double>& q_velocity_porous = args.
array<
double>(
"q_velocity_porous");
2226 const xt::pyarray<double>& q_porosity = args.
array<
double>(
"q_porosity");
2227 const xt::pyarray<double>& q_dragAlpha = args.
array<
double>(
"q_dragAlpha");
2228 const xt::pyarray<double>& q_dragBeta = args.
array<
double>(
"q_dragBeta");
2229 const xt::pyarray<double>& q_mass_source = args.
array<
double>(
"q_mass_source");
2230 const xt::pyarray<double>& q_turb_var_0 = args.
array<
double>(
"q_turb_var_0");
2231 const xt::pyarray<double>& q_turb_var_1 = args.
array<
double>(
"q_turb_var_1");
2232 const xt::pyarray<double>& q_turb_var_grad_0 = args.
array<
double>(
"q_turb_var_grad_0");
2233 const double LAG_LES = args.
scalar<
double>(
"LAG_LES");
2234 xt::pyarray<double> & q_eddy_viscosity = args.
array<
double>(
"q_eddy_viscosity");
2235 xt::pyarray<double> & q_eddy_viscosity_last = args.
array<
double>(
"q_eddy_viscosity_last");
2236 xt::pyarray<double> & ebqe_eddy_viscosity = args.
array<
double>(
"ebqe_eddy_viscosity");
2237 xt::pyarray<double> & ebqe_eddy_viscosity_last = args.
array<
double>(
"ebqe_eddy_viscosity_last");
2238 xt::pyarray<int>& p_l2g = args.
array<
int>(
"p_l2g");
2239 xt::pyarray<int>& vel_l2g = args.
array<
int>(
"vel_l2g");
2240 xt::pyarray<int>& rp_l2g = args.
array<
int>(
"rp_l2g");
2241 xt::pyarray<int>& rvel_l2g = args.
array<
int>(
"rvel_l2g");
2242 xt::pyarray<double>& p_dof = args.
array<
double>(
"p_dof");
2243 xt::pyarray<double>& u_dof = args.
array<
double>(
"u_dof");
2244 xt::pyarray<double>& v_dof = args.
array<
double>(
"v_dof");
2245 xt::pyarray<double>& w_dof = args.
array<
double>(
"w_dof");
2246 xt::pyarray<double>& p_old_dof = args.
array<
double>(
"p_old_dof");
2247 xt::pyarray<double>& u_old_dof = args.
array<
double>(
"u_old_dof");
2248 xt::pyarray<double>& v_old_dof = args.
array<
double>(
"v_old_dof");
2249 xt::pyarray<double>& w_old_dof = args.
array<
double>(
"w_old_dof");
2250 xt::pyarray<double>& g = args.
array<
double>(
"g");
2251 const double useVF = args.
scalar<
double>(
"useVF");
2252 xt::pyarray<double>& q_rho = args.
array<
double>(
"q_rho");
2253 xt::pyarray<double>& vf = args.
array<
double>(
"vf");
2254 xt::pyarray<double>&
phi = args.
array<
double>(
"phi");
2255 xt::pyarray<double>& phi_nodes = args.
array<
double>(
"phi_nodes");
2256 xt::pyarray<double>& normal_phi = args.
array<
double>(
"normal_phi");
2257 xt::pyarray<double>& kappa_phi = args.
array<
double>(
"kappa_phi");
2258 xt::pyarray<double>& q_mom_u_acc = args.
array<
double>(
"q_mom_u_acc");
2259 xt::pyarray<double>& q_mom_v_acc = args.
array<
double>(
"q_mom_v_acc");
2260 xt::pyarray<double>& q_mom_w_acc = args.
array<
double>(
"q_mom_w_acc");
2261 xt::pyarray<double>& q_mass_adv = args.
array<
double>(
"q_mass_adv");
2262 xt::pyarray<double>& q_mom_u_acc_beta_bdf = args.
array<
double>(
"q_mom_u_acc_beta_bdf");
2263 xt::pyarray<double>& q_mom_v_acc_beta_bdf = args.
array<
double>(
"q_mom_v_acc_beta_bdf");
2264 xt::pyarray<double>& q_mom_w_acc_beta_bdf = args.
array<
double>(
"q_mom_w_acc_beta_bdf");
2265 xt::pyarray<double>& q_dV = args.
array<
double>(
"q_dV");
2266 xt::pyarray<double>& q_dV_last = args.
array<
double>(
"q_dV_last");
2267 xt::pyarray<double>& q_velocity_sge = args.
array<
double>(
"q_velocity_sge");
2268 xt::pyarray<double>& q_cfl = args.
array<
double>(
"q_cfl");
2269 xt::pyarray<double>& q_numDiff_u = args.
array<
double>(
"q_numDiff_u");
2270 xt::pyarray<double>& q_numDiff_v = args.
array<
double>(
"q_numDiff_v");
2271 xt::pyarray<double>& q_numDiff_w = args.
array<
double>(
"q_numDiff_w");
2272 xt::pyarray<double>& q_numDiff_u_last = args.
array<
double>(
"q_numDiff_u_last");
2273 xt::pyarray<double>& q_numDiff_v_last = args.
array<
double>(
"q_numDiff_v_last");
2274 xt::pyarray<double>& q_numDiff_w_last = args.
array<
double>(
"q_numDiff_w_last");
2275 xt::pyarray<int>& sdInfo_u_u_rowptr = args.
array<
int>(
"sdInfo_u_u_rowptr");
2276 xt::pyarray<int>& sdInfo_u_u_colind = args.
array<
int>(
"sdInfo_u_u_colind");
2277 xt::pyarray<int>& sdInfo_u_v_rowptr = args.
array<
int>(
"sdInfo_u_v_rowptr");
2278 xt::pyarray<int>& sdInfo_u_v_colind = args.
array<
int>(
"sdInfo_u_v_colind");
2279 xt::pyarray<int>& sdInfo_u_w_rowptr = args.
array<
int>(
"sdInfo_u_w_rowptr");
2280 xt::pyarray<int>& sdInfo_u_w_colind = args.
array<
int>(
"sdInfo_u_w_colind");
2281 xt::pyarray<int>& sdInfo_v_v_rowptr = args.
array<
int>(
"sdInfo_v_v_rowptr");
2282 xt::pyarray<int>& sdInfo_v_v_colind = args.
array<
int>(
"sdInfo_v_v_colind");
2283 xt::pyarray<int>& sdInfo_v_u_rowptr = args.
array<
int>(
"sdInfo_v_u_rowptr");
2284 xt::pyarray<int>& sdInfo_v_u_colind = args.
array<
int>(
"sdInfo_v_u_colind");
2285 xt::pyarray<int>& sdInfo_v_w_rowptr = args.
array<
int>(
"sdInfo_v_w_rowptr");
2286 xt::pyarray<int>& sdInfo_v_w_colind = args.
array<
int>(
"sdInfo_v_w_colind");
2287 xt::pyarray<int>& sdInfo_w_w_rowptr = args.
array<
int>(
"sdInfo_w_w_rowptr");
2288 xt::pyarray<int>& sdInfo_w_w_colind = args.
array<
int>(
"sdInfo_w_w_colind");
2289 xt::pyarray<int>& sdInfo_w_u_rowptr = args.
array<
int>(
"sdInfo_w_u_rowptr");
2290 xt::pyarray<int>& sdInfo_w_u_colind = args.
array<
int>(
"sdInfo_w_u_colind");
2291 xt::pyarray<int>& sdInfo_w_v_rowptr = args.
array<
int>(
"sdInfo_w_v_rowptr");
2292 xt::pyarray<int>& sdInfo_w_v_colind = args.
array<
int>(
"sdInfo_w_v_colind");
2293 int offset_p = args.
scalar<
int>(
"offset_p");
2294 int offset_u = args.
scalar<
int>(
"offset_u");
2295 int offset_v = args.
scalar<
int>(
"offset_v");
2296 int offset_w = args.
scalar<
int>(
"offset_w");
2297 int stride_p = args.
scalar<
int>(
"stride_p");
2298 int stride_u = args.
scalar<
int>(
"stride_u");
2299 int stride_v = args.
scalar<
int>(
"stride_v");
2300 int stride_w = args.
scalar<
int>(
"stride_w");
2301 xt::pyarray<double>& globalResidual = args.
array<
double>(
"globalResidual");
2302 int nExteriorElementBoundaries_global = args.
scalar<
int>(
"nExteriorElementBoundaries_global");
2303 xt::pyarray<int>& exteriorElementBoundariesArray = args.
array<
int>(
"exteriorElementBoundariesArray");
2304 xt::pyarray<int>& elementBoundariesArray = args.
array<
int>(
"elementBoundariesArray");
2305 xt::pyarray<int>& elementBoundaryElementsArray = args.
array<
int>(
"elementBoundaryElementsArray");
2306 xt::pyarray<int>& elementBoundaryLocalElementBoundariesArray = args.
array<
int>(
"elementBoundaryLocalElementBoundariesArray");
2307 xt::pyarray<double>& ebqe_vf_ext = args.
array<
double>(
"ebqe_vf_ext");
2308 xt::pyarray<double>& bc_ebqe_vf_ext = args.
array<
double>(
"bc_ebqe_vf_ext");
2309 xt::pyarray<double>& ebqe_phi_ext = args.
array<
double>(
"ebqe_phi_ext");
2310 xt::pyarray<double>& bc_ebqe_phi_ext = args.
array<
double>(
"bc_ebqe_phi_ext");
2311 xt::pyarray<double>& ebqe_normal_phi_ext = args.
array<
double>(
"ebqe_normal_phi_ext");
2312 xt::pyarray<double>& ebqe_kappa_phi_ext = args.
array<
double>(
"ebqe_kappa_phi_ext");
2313 const xt::pyarray<double>& ebqe_porosity_ext = args.
array<
double>(
"ebqe_porosity_ext");
2314 const xt::pyarray<double>& ebqe_turb_var_0 = args.
array<
double>(
"ebqe_turb_var_0");
2315 const xt::pyarray<double>& ebqe_turb_var_1 = args.
array<
double>(
"ebqe_turb_var_1");
2316 xt::pyarray<int>& isDOFBoundary_p = args.
array<
int>(
"isDOFBoundary_p");
2317 xt::pyarray<int>& isDOFBoundary_u = args.
array<
int>(
"isDOFBoundary_u");
2318 xt::pyarray<int>& isDOFBoundary_v = args.
array<
int>(
"isDOFBoundary_v");
2319 xt::pyarray<int>& isDOFBoundary_w = args.
array<
int>(
"isDOFBoundary_w");
2320 xt::pyarray<int>& isAdvectiveFluxBoundary_p = args.
array<
int>(
"isAdvectiveFluxBoundary_p");
2321 xt::pyarray<int>& isAdvectiveFluxBoundary_u = args.
array<
int>(
"isAdvectiveFluxBoundary_u");
2322 xt::pyarray<int>& isAdvectiveFluxBoundary_v = args.
array<
int>(
"isAdvectiveFluxBoundary_v");
2323 xt::pyarray<int>& isAdvectiveFluxBoundary_w = args.
array<
int>(
"isAdvectiveFluxBoundary_w");
2324 xt::pyarray<int>& isDiffusiveFluxBoundary_u = args.
array<
int>(
"isDiffusiveFluxBoundary_u");
2325 xt::pyarray<int>& isDiffusiveFluxBoundary_v = args.
array<
int>(
"isDiffusiveFluxBoundary_v");
2326 xt::pyarray<int>& isDiffusiveFluxBoundary_w = args.
array<
int>(
"isDiffusiveFluxBoundary_w");
2327 xt::pyarray<double>& ebqe_bc_p_ext = args.
array<
double>(
"ebqe_bc_p_ext");
2328 xt::pyarray<double>& ebqe_bc_flux_mass_ext = args.
array<
double>(
"ebqe_bc_flux_mass_ext");
2329 xt::pyarray<double>& ebqe_bc_flux_mom_u_adv_ext = args.
array<
double>(
"ebqe_bc_flux_mom_u_adv_ext");
2330 xt::pyarray<double>& ebqe_bc_flux_mom_v_adv_ext = args.
array<
double>(
"ebqe_bc_flux_mom_v_adv_ext");
2331 xt::pyarray<double>& ebqe_bc_flux_mom_w_adv_ext = args.
array<
double>(
"ebqe_bc_flux_mom_w_adv_ext");
2332 xt::pyarray<double>& ebqe_bc_u_ext = args.
array<
double>(
"ebqe_bc_u_ext");
2333 xt::pyarray<double>& ebqe_bc_flux_u_diff_ext = args.
array<
double>(
"ebqe_bc_flux_u_diff_ext");
2334 xt::pyarray<double>& ebqe_penalty_ext = args.
array<
double>(
"ebqe_penalty_ext");
2335 xt::pyarray<double>& ebqe_bc_v_ext = args.
array<
double>(
"ebqe_bc_v_ext");
2336 xt::pyarray<double>& ebqe_bc_flux_v_diff_ext = args.
array<
double>(
"ebqe_bc_flux_v_diff_ext");
2337 xt::pyarray<double>& ebqe_bc_w_ext = args.
array<
double>(
"ebqe_bc_w_ext");
2338 xt::pyarray<double>& ebqe_bc_flux_w_diff_ext = args.
array<
double>(
"ebqe_bc_flux_w_diff_ext");
2339 xt::pyarray<double>& q_x = args.
array<
double>(
"q_x");
2340 xt::pyarray<double>& q_u_0 = args.
array<
double>(
"q_u_0");
2341 xt::pyarray<double>& q_u_1 = args.
array<
double>(
"q_u_1");
2342 xt::pyarray<double>& q_u_2 = args.
array<
double>(
"q_u_2");
2343 xt::pyarray<double>& q_u_3 = args.
array<
double>(
"q_u_3");
2344 xt::pyarray<double>& q_velocity = args.
array<
double>(
"q_velocity");
2345 xt::pyarray<double>& ebqe_velocity = args.
array<
double>(
"ebqe_velocity");
2346 xt::pyarray<double>& flux = args.
array<
double>(
"flux");
2347 xt::pyarray<double>& elementResidual_p_save = args.
array<
double>(
"elementResidual_p_save");
2348 xt::pyarray<int>& elementFlags = args.
array<
int>(
"elementFlags");
2349 xt::pyarray<int>& boundaryFlags = args.
array<
int>(
"boundaryFlags");
2350 xt::pyarray<double>& barycenters = args.
array<
double>(
"barycenters");
2351 xt::pyarray<double>& wettedAreas = args.
array<
double>(
"wettedAreas");
2352 xt::pyarray<double>& netForces_p = args.
array<
double>(
"netForces_p");
2353 xt::pyarray<double>& netForces_v = args.
array<
double>(
"netForces_v");
2354 xt::pyarray<double>& netMoments = args.
array<
double>(
"netMoments");
2355 xt::pyarray<double>& velocityError = args.
array<
double>(
"velocityError");
2356 xt::pyarray<double>& velocityErrorNodal = args.
array<
double>(
"velocityErrorNodal");
2357 xt::pyarray<double>& forcex = args.
array<
double>(
"forcex");
2358 xt::pyarray<double>& forcey = args.
array<
double>(
"forcey");
2359 xt::pyarray<double>& forcez = args.
array<
double>(
"forcez");
2360 int use_ball_as_particle = args.
scalar<
int>(
"use_ball_as_particle");
2361 xt::pyarray<double>& ball_center = args.
array<
double>(
"ball_center");
2362 xt::pyarray<double>& ball_radius = args.
array<
double>(
"ball_radius");
2363 xt::pyarray<double>& ball_velocity = args.
array<
double>(
"ball_velocity");
2364 xt::pyarray<double>& ball_angular_velocity = args.
array<
double>(
"ball_angular_velocity");
2365 xt::pyarray<double>& ball_density = args.
array<
double>(
"ball_density");
2366 xt::pyarray<double>& particle_signed_distances = args.
array<
double>(
"particle_signed_distances");
2367 xt::pyarray<double>& particle_signed_distance_normals = args.
array<
double>(
"particle_signed_distance_normals");
2368 xt::pyarray<double>& particle_velocities = args.
array<
double>(
"particle_velocities");
2369 xt::pyarray<double>& particle_centroids = args.
array<
double>(
"particle_centroids");
2370 xt::pyarray<double>& ebqe_phi_s = args.
array<
double>(
"ebqe_phi_s");
2371 xt::pyarray<double>& ebq_global_grad_phi_s = args.
array<
double>(
"ebq_global_grad_phi_s");
2372 xt::pyarray<double>& ebq_particle_velocity_s = args.
array<
double>(
"ebq_particle_velocity_s");
2373 int nParticles = args.
scalar<
int>(
"nParticles");
2374 xt::pyarray<double>& particle_netForces = args.
array<
double>(
"particle_netForces");
2375 xt::pyarray<double>& particle_netMoments = args.
array<
double>(
"particle_netMoments");
2376 xt::pyarray<double>& particle_surfaceArea = args.
array<
double>(
"particle_surfaceArea");
2377 xt::pyarray<double>& particle_surfaceArea_projected = args.
array<
double>(
"particle_surfaceArea_projected");
2378 xt::pyarray<double>& projection_direction = args.
array<
double>(
"projection_direction");
2379 xt::pyarray<double>& particle_volume = args.
array<
double>(
"particle_volume");
2380 int nElements_owned = args.
scalar<
int>(
"nElements_owned");
2381 double particle_nitsche = args.
scalar<
double>(
"particle_nitsche");
2382 double particle_epsFact = args.
scalar<
double>(
"particle_epsFact");
2383 double particle_alpha = args.
scalar<
double>(
"particle_alpha");
2384 double particle_beta = args.
scalar<
double>(
"particle_beta");
2385 double particle_penalty_constant = args.
scalar<
double>(
"particle_penalty_constant");
2386 double ghost_penalty_constant = args.
scalar<
double>(
"ghost_penalty_constant");
2387 xt::pyarray<double>& phi_solid_nodes = args.
array<
double>(
"phi_solid_nodes");
2388 xt::pyarray<double>& distance_to_solids = args.
array<
double>(
"distance_to_solids");
2389 bool useExact = args.
scalar<
int>(
"useExact");
2390 xt::pyarray<double>& isActiveR = args.
array<
double>(
"isActiveR");
2391 xt::pyarray<double>& isActiveDOF_p = args.
array<
double>(
"isActiveDOF_p");
2392 xt::pyarray<double>& isActiveDOF_vel = args.
array<
double>(
"isActiveDOF_vel");
2393 const bool normalize_pressure = args.
scalar<
int>(
"normalize_pressure");
2394 xt::pyarray<double>& errors = args.
array<
double>(
"errors");
2395 xt::pyarray<double>& ball_u = args.
array<
double>(
"ball_u");
2396 xt::pyarray<double>& ball_v = args.
array<
double>(
"ball_v");
2397 xt::pyarray<double>& ball_w = args.
array<
double>(
"ball_w");
2398 xt::pyarray<int>& isActiveElement = args.
array<
int>(
"isActiveElement");
2399 xt::pyarray<int>& isActiveElement_last = args.
array<
int>(
"isActiveElement_last");
2400 logEvent(
"Entered mprans calculateResidual",6);
2408 const int nQuadraturePoints_global(nElements_global*nQuadraturePoints_element);
2412 double p_dv=0.0,pa_dv=0.0,total_volume=0.0,total_surface_area=0.0,total_flux=0.0;
2413 double mesh_volume_conservation=0.0,
2414 mesh_volume_conservation_weak=0.0,
2415 mesh_volume_conservation_err_max=0.0,
2416 mesh_volume_conservation_err_max_weak=0.0,
2418 &p_L1=errors(0,0),&u_L1=errors(0,1),&v_L1=errors(0,2),&w_L1=errors(0,3),&velocity_L1=errors(0,4),
2419 &p_L2=errors(1,0),&u_L2=errors(1,1),&v_L2=errors(1,2),&w_L2=errors(1,3),&velocity_L2=errors(1,4),
2420 &p_LI=errors(2,0),&u_LI=errors(2,1),&v_LI=errors(2,2),&w_LI=errors(2,3),&velocity_LI=errors(2,4);
2421 p_L1=0.0; u_L1=0.0; v_L1=0.0; w_L1=0.0; velocity_L1=0.0;
2422 p_L2=0.0; u_L2=0.0; v_L2=0.0; w_L2=0.0; velocity_L2=0.0;
2423 p_LI=0.0; u_LI=0.0; v_LI=0.0; w_LI=0.0; velocity_LI=0.0;
2424 double globalConservationError=0.0;
2429 for(
int eN=0;eN<nElements_global;eN++)
2432 double elementResidual_p[nDOF_test_element],elementResidual_p_check[nDOF_test_element],elementResidual_mesh[nDOF_test_element],
2433 elementResidual_u[nDOF_v_test_element],
2434 elementResidual_v[nDOF_v_test_element],
2435 elementResidual_w[nDOF_v_test_element],
2436 pelementResidual_u[nDOF_v_test_element],
2437 pelementResidual_v[nDOF_v_test_element],
2438 pelementResidual_w[nDOF_v_test_element],
2439 velocityErrorElement[nDOF_v_test_element],
2441 bool element_active=
false;
2442 isActiveElement[eN]=0;
2443 double mesh_volume_conservation_element=0.0,
2444 mesh_volume_conservation_element_weak=0.0;
2445 int particle_index=0;
2446 for (
int i=0;i<nDOF_test_element;i++)
2448 int eN_i = eN*nDOF_test_element+i;
2449 elementResidual_p_save.data()[eN_i]=0.0;
2450 elementResidual_mesh[i]=0.0;
2451 elementResidual_p[i]=0.0;
2452 elementResidual_p_check[i]=0.0;
2454 for (
int i=0;i<nDOF_v_test_element;i++)
2456 elementResidual_u[i]=0.0;
2457 elementResidual_v[i]=0.0;
2458 elementResidual_w[i]=0.0;
2459 pelementResidual_u[i]=0.0;
2460 pelementResidual_v[i]=0.0;
2461 pelementResidual_w[i]=0.0;
2462 velocityErrorElement[i]=0.0;
2465 if(use_ball_as_particle==1 && nParticles > 0)
2467 double min_d = 1e10;
2468 for (
int I=0;I<nDOF_mesh_trial_element;I++)
2471 mesh_dof.data()[3*mesh_l2g.data()[eN*nDOF_mesh_trial_element+I]+0],
2472 mesh_dof.data()[3*mesh_l2g.data()[eN*nDOF_mesh_trial_element+I]+1],
2473 mesh_dof.data()[3*mesh_l2g.data()[eN*nDOF_mesh_trial_element+I]+2],
2474 phi_solid_nodes.data()[mesh_l2g.data()[eN*nDOF_mesh_trial_element+I]]);
2475 if (phi_solid_nodes.data()[mesh_l2g.data()[eN*nDOF_mesh_trial_element+I]] < min_d)
2477 min_d = phi_solid_nodes.data()[mesh_l2g.data()[eN*nDOF_mesh_trial_element+I]];
2478 particle_index = index;
2486 double element_phi[nDOF_mesh_trial_element], element_phi_s[nDOF_mesh_trial_element];
2487 for (
int j=0;j<nDOF_mesh_trial_element;j++)
2489 int eN_j = eN*nDOF_mesh_trial_element+j;
2490 element_phi[j] = phi_nodes.data()[p_l2g.data()[eN_j]];
2491 element_phi_s[j] = phi_solid_nodes.data()[p_l2g.data()[eN_j]];
2493 double element_nodes[nDOF_mesh_trial_element*3];
2494 for (
int i=0;i<nDOF_mesh_trial_element;i++)
2496 int eN_i=eN*nDOF_mesh_trial_element+i;
2497 for(
int I=0;I<3;I++)
2498 element_nodes[i*3 + I] = mesh_dof.data()[mesh_l2g.data()[eN_i]*3 + I];
2500 int icase_s =
gf_s.
calculate(element_phi_s, element_nodes, x_ref.data(),
false);
2503 element_active=
true;
2504 isActiveElement[eN]=1;
2506 for (
int ebN_element=0;ebN_element < nDOF_mesh_trial_element; ebN_element++)
2508 const int ebN = elementBoundariesArray.data()[eN*nDOF_mesh_trial_element+ebN_element];
2511 if (elementBoundaryElementsArray[ebN*2+1] != -1 && element_phi_s[(ebN_element+1)%nDOF_mesh_trial_element]*element_phi_s[(ebN_element+2)%nDOF_mesh_trial_element] <= 0.0)
2514 if (elementBoundaryElementsArray[ebN*2 + 0] == eN)
2519 else if (icase_s == 1)
2521 element_active=
true;
2522 isActiveElement[eN]=1;
2525 int icase_p =
gf_p.
calculate(element_phi, element_nodes, x_ref.data(), -
rho_1*g.data()[1], -
rho_0*g.data()[1],
false,
true);
2528 int icase_p =
gf_p.
calculate(element_phi, element_nodes, x_ref.data(), 1.,1.,
false,
false);
2529 int icase =
gf.
calculate(element_phi, element_nodes, x_ref.data(), 1.,1.,
false,
false);
2534 for (
int ebN_element=0;ebN_element < nDOF_mesh_trial_element; ebN_element++)
2536 const int ebN = elementBoundariesArray.data()[eN*nDOF_mesh_trial_element+ebN_element];
2545 double numDiffMax=0.0;
2546 for(
int fluid_phase=0;fluid_phase < 2 - abs(icase);fluid_phase++)
2548 for(
int k=0;k<nQuadraturePoints_element;k++)
2551 int eN_k = eN*nQuadraturePoints_element+k,
2552 eN_k_nSpace = eN_k*nSpace,
2554 eN_nDOF_trial_element = eN*nDOF_trial_element,
2555 eN_nDOF_v_trial_element = eN*nDOF_v_trial_element;
2556 double p=0.0,
u=0.0,
v=0.0,
w=0.0,
2558 p_old=0.0,u_old=0.0,v_old=0.0,w_old=0.0,
2586 mom_uu_diff_ten[nSpace]=
ZEROVEC,
2587 mom_vv_diff_ten[nSpace]=
ZEROVEC,
2588 mom_ww_diff_ten[nSpace]=
ZEROVEC,
2599 dmom_u_ham_grad_p[nSpace]=
ZEROVEC,
2600 dmom_u_ham_grad_u[nSpace]=
ZEROVEC,
2601 dmom_u_ham_grad_v[nSpace]=
ZEROVEC,
2602 dmom_u_ham_grad_w[nSpace]=
ZEROVEC,
2607 dmom_v_ham_grad_p[nSpace]=
ZEROVEC,
2608 dmom_v_ham_grad_u[nSpace]=
ZEROVEC,
2609 dmom_v_ham_grad_v[nSpace]=
ZEROVEC,
2610 dmom_v_ham_grad_w[nSpace]=
ZEROVEC,
2615 dmom_w_ham_grad_p[nSpace]=
ZEROVEC,
2616 dmom_w_ham_grad_u[nSpace]=
ZEROVEC,
2617 dmom_w_ham_grad_v[nSpace]=
ZEROVEC,
2618 dmom_w_ham_grad_w[nSpace]=
ZEROVEC,
2632 Lstar_u_p[nDOF_test_element],
2633 Lstar_v_p[nDOF_test_element],
2634 Lstar_w_p[nDOF_test_element],
2635 Lstar_u_u[nDOF_v_test_element],
2636 Lstar_v_v[nDOF_v_test_element],
2637 Lstar_w_w[nDOF_v_test_element],
2638 Lstar_p_u[nDOF_v_test_element],
2639 Lstar_p_v[nDOF_v_test_element],
2640 Lstar_p_w[nDOF_v_test_element],
2645 tau_p=0.0,tau_p0=0.0,tau_p1=0.0,
2646 tau_v=0.0,tau_v0=0.0,tau_v1=0.0,
2649 jacInv[nSpace*nSpace],
2650 p_trial[nDOF_trial_element], vel_trial[nDOF_v_trial_element],
2651 p_grad_trial_ib[nDOF_trial_element*nSpace], vel_grad_trial_ib[nDOF_v_trial_element*nSpace],
2652 p_grad_trial[nDOF_trial_element*nSpace],vel_grad_trial[nDOF_v_trial_element*nSpace],
2653 p_test_dV[nDOF_trial_element],vel_test_dV[nDOF_v_test_element],
2654 p_grad_test_dV[nDOF_test_element*nSpace],vel_grad_test_dV[nDOF_v_test_element*nSpace],
2661 dmom_u_source[nSpace]=
ZEROVEC,
2662 dmom_v_source[nSpace]=
ZEROVEC,
2663 dmom_w_source[nSpace]=
ZEROVEC,
2665 G[nSpace*nSpace],G_dd_G,tr_G,norm_Rv,h_phi, dmom_adv_star[nSpace]=
ZEROVEC,dmom_adv_sge[nSpace]=
ZEROVEC,dmom_ham_grad_sge[nSpace]=
ZEROVEC,
2671 dmom_u_source_s[nSpace]=
ZEROVEC,
2672 dmom_v_source_s[nSpace]=
ZEROVEC,
2673 dmom_w_source_s[nSpace]=
ZEROVEC,
2677 dmom_u_adv_u_s[nSpace]=
ZEROVEC,
2678 dmom_v_adv_v_s[nSpace]=
ZEROVEC,
2679 dmom_w_adv_w_s[nSpace]=
ZEROVEC,
2681 dmom_u_ham_grad_u_s[nSpace]=
ZEROVEC,
2682 dmom_u_ham_grad_v_s[nSpace]=
ZEROVEC,
2683 dmom_u_ham_grad_w_s[nSpace]=
ZEROVEC,
2688 dmom_v_ham_grad_u_s[nSpace]=
ZEROVEC,
2689 dmom_v_ham_grad_v_s[nSpace]=
ZEROVEC,
2690 dmom_v_ham_grad_w_s[nSpace]=
ZEROVEC,
2695 dmom_w_ham_grad_u_s[nSpace]=
ZEROVEC,
2696 dmom_w_ham_grad_v_s[nSpace]=
ZEROVEC,
2697 dmom_w_ham_grad_w_s[nSpace]=
ZEROVEC,
2709 ck.calculateMapping_element(eN,
2713 mesh_trial_ref.data(),
2714 mesh_grad_trial_ref.data(),
2719 ck.calculateH_element(eN,
2721 nodeDiametersArray.data(),
2723 mesh_trial_ref.data(),
2726 ck.calculateMappingVelocity_element(eN,
2728 mesh_velocity_dof.data(),
2730 mesh_trial_ref.data(),
2735 dV = fabs(jacDet)*dV_ref.data()[k];
2736 ck.calculateG(jacInv,G,G_dd_G,tr_G);
2739 eps_rho = epsFact_rho*(useMetrics*h_phi+(1.0-useMetrics)*elementDiameter.data()[eN]);
2740 eps_mu = epsFact_mu *(useMetrics*h_phi+(1.0-useMetrics)*elementDiameter.data()[eN]);
2743 ck.gradTrialFromRef(&p_grad_trial_ref.data()[k*nDOF_trial_element*nSpace],jacInv,p_grad_trial);
2744 ck_v.gradTrialFromRef(&vel_grad_trial_ref.data()[k*nDOF_v_trial_element*nSpace],jacInv,vel_grad_trial);
2745 for (
int i=0; i < nDOF_trial_element; i++)
2747 p_trial[i] = p_trial_ref.data()[k*nDOF_trial_element + i];
2748 p_grad_trial_ib[i*nSpace + 0] = p_grad_trial[i*nSpace+0];
2749 p_grad_trial_ib[i*nSpace + 1] = p_grad_trial[i*nSpace+1];
2750 p_grad_trial_ib[i*nSpace + 2] = p_grad_trial[i*nSpace+2];
2752 for (
int i=0; i < nDOF_v_trial_element; i++)
2754 vel_trial[i] = vel_trial_ref.data()[k*nDOF_v_trial_element + i];
2755 vel_grad_trial_ib[i*nSpace + 0] = vel_grad_trial[i*nSpace+0];
2756 vel_grad_trial_ib[i*nSpace + 1] = vel_grad_trial[i*nSpace+1];
2757 vel_grad_trial_ib[i*nSpace + 2] = vel_grad_trial[i*nSpace+2];
2762 for (
int i=0; i < nDOF_trial_element; i++)
2764 if (fluid_phase == 0)
2766 if (not std::isnan(
gf_p.
VA(i)))
2769 p_grad_trial_ib[i*nSpace + 0] =
gf_p.
VA_x(i);
2770 p_grad_trial_ib[i*nSpace + 1] =
gf_p.
VA_y(i);
2771 p_grad_trial_ib[i*nSpace + 2] =
gf_p.
VA_z(i);
2776 if (not std::isnan(
gf_p.
VB(i)))
2779 p_grad_trial_ib[i*nSpace + 0] =
gf_p.
VB_x(i);
2780 p_grad_trial_ib[i*nSpace + 1] =
gf_p.
VB_y(i);
2781 p_grad_trial_ib[i*nSpace + 2] =
gf_p.
VB_z(i);
2785 if(nDOF_v_trial_element == nDOF_trial_element)
2787 for (
int vi=0; vi < nDOF_v_trial_element; vi++)
2789 if (fluid_phase == 0)
2791 if (not std::isnan(
gf.
VA(vi)))
2793 vel_trial[vi] =
gf.
VA(vi);
2794 vel_grad_trial_ib[vi*nSpace + 0] =
gf.
VA_x(vi);
2795 vel_grad_trial_ib[vi*nSpace + 1] =
gf.
VA_y(vi);
2796 vel_grad_trial_ib[vi*nSpace + 2] =
gf.
VA_z(vi);
2801 if (not std::isnan(
gf.
VB(vi)))
2803 vel_trial[vi] =
gf.
VB(vi);
2804 vel_grad_trial_ib[vi*nSpace + 0] =
gf.
VB_x(vi);
2805 vel_grad_trial_ib[vi*nSpace + 1] =
gf.
VB_y(vi);
2806 vel_grad_trial_ib[vi*nSpace + 2] =
gf.
VB_z(vi);
2814 for (
int vi=0; vi < nDOF_v_trial_element; vi++)
2817 if (fabs(p_trial_ref.data()[k*nDOF_trial_element + vi] - p_trial[vi]) > 1.0e-8)
2819 for (
int vj=0; vj < nDOF_trial_element; vj++)
2820 std::cout<<
"Trial "<<p_trial_ref.data()[k*nDOF_trial_element + vj]<<
'\t'<<
gf_p.
VA(vj)<<
'\t'<<
gf_p.
VB(vj)<<std::endl;
2823 if (fabs(p_grad_trial[vi*nSpace + 0] - p_grad_trial_ib[vi*nSpace+0]) > 1.0e-8)
2825 for (
int vj=0; vj < nDOF_trial_element; vj++)
2826 std::cout<<
"Grad Trial x"<<p_grad_trial[vj*nSpace + 0]<<
'\t'<<
gf_p.
VA_x(vj)<<
'\t'<<
gf_p.
VB_x(vj)<<std::endl;
2829 if (fabs(p_grad_trial[vi*nSpace + 1] - p_grad_trial_ib[vi*nSpace+1]) > 1.0e-8)
2831 for (
int vj=0; vj < nDOF_trial_element; vj++)
2832 std::cout<<
"Grad Trial y "<<p_grad_trial[vj*nSpace + 1]<<
'\t'<<
gf_p.
VA_y(vj)<<
'\t'<<
gf_p.
VB_y(vj)<<std::endl;
2835 if (fabs(p_grad_trial[vi*nSpace + 2] - p_grad_trial_ib[vi*nSpace+2]) > 1.0e-8)
2837 for (
int vj=0; vj < nDOF_trial_element; vj++)
2838 std::cout<<
"Grad Trial z "<<p_grad_trial[vj*nSpace + 2]<<
'\t'<<
gf_p.
VA_z(vj)<<
'\t'<<
gf_p.
VB_z(vj)<<std::endl;
2842 if (fabs(vel_trial_ref.data()[k*nDOF_v_trial_element + vi] - vel_trial[vi]) > 1.0e-8)
2844 for (
int vj=0; vj < nDOF_v_trial_element; vj++)
2845 std::cout<<
"Trial "<<vel_trial_ref.data()[k*nDOF_v_trial_element + vj]<<
'\t'<<
gf.
VA(vj)<<
'\t'<<
gf.
VB(vj)<<std::endl;
2848 if (fabs(vel_grad_trial[vi*nSpace + 0] - vel_grad_trial_ib[vi*nSpace+0]) > 1.0e-8)
2850 for (
int vj=0; vj < nDOF_v_trial_element; vj++)
2851 std::cout<<
"Grad Trial x"<<vel_grad_trial[vj*nSpace + 0]<<
'\t'<<
gf.
VA_x(vj)<<
'\t'<<
gf.
VB_x(vj)<<std::endl;
2854 if (fabs(vel_grad_trial[vi*nSpace + 1] - vel_grad_trial_ib[vi*nSpace+1]) > 1.0e-8)
2856 for (
int vj=0; vj < nDOF_v_trial_element; vj++)
2857 std::cout<<
"Grad Trial y "<<vel_grad_trial[vj*nSpace + 1]<<
'\t'<<
gf.
VA_y(vj)<<
'\t'<<
gf.
VB_y(vj)<<std::endl;
2860 if (fabs(vel_grad_trial[vi*nSpace + 2] - vel_grad_trial_ib[vi*nSpace+2]) > 1.0e-8)
2862 for (
int vj=0; vj < nDOF_v_trial_element; vj++)
2863 std::cout<<
"Grad Trial z "<<vel_grad_trial[vj*nSpace + 2]<<
'\t'<<
gf.
VA_z(vj)<<
'\t'<<
gf.
VB_z(vj)<<std::endl;
2873 ck.valFromDOF(p_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],p_trial,p);
2874 ck_v.valFromDOF(u_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_trial,
u);
2875 ck_v.valFromDOF(v_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_trial,
v);
2876 ck_v.valFromDOF(w_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_trial,
w);
2877 ck.valFromDOF(p_old_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],p_trial,p_old);
2878 ck_v.valFromDOF(u_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_trial,u_old);
2879 ck_v.valFromDOF(v_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_trial,v_old);
2880 ck_v.valFromDOF(w_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_trial,w_old);
2882 ck.gradFromDOF(p_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],p_grad_trial_ib,grad_p);
2883 ck_v.gradFromDOF(u_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_ib,grad_u);
2884 ck_v.gradFromDOF(v_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_ib,grad_v);
2885 ck_v.gradFromDOF(w_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_ib,grad_w);
2886 ck.gradFromDOF(p_old_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],p_grad_trial_ib,grad_p_old);
2887 ck_v.gradFromDOF(u_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_ib,grad_u_old);
2888 ck_v.gradFromDOF(v_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_ib,grad_v_old);
2889 ck_v.gradFromDOF(w_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_ib,grad_w_old);
2891 if (PRESSURE_PROJECTION_STABILIZATION)
2892 ck.DOFaverage(p_dof.data(), &p_l2g.data()[eN_nDOF_trial_element],p_element_avg);
2895 for (
int j=0;j<nDOF_test_element;j++)
2897 p_test_dV[j] = p_trial[j]*dV;
2898 for (
int I=0;I<nSpace;I++)
2900 p_grad_test_dV[j*nSpace+I] = p_grad_trial_ib[j*nSpace+I]*dV;
2904 for (
int j=0;j<nDOF_v_test_element;j++)
2906 vel_test_dV[j] = vel_trial[j]*dV;
2907 for (
int I=0;I<nSpace;I++)
2909 vel_grad_test_dV[j*nSpace+I] = vel_grad_trial_ib[j*nSpace+I]*dV;
2913 for (
int j=0;j<nDOF_test_element;j++)
2915 p_test_dV[j] = p_test_ref.data()[k*nDOF_trial_element+j]*dV;
2916 for (
int I=0;I<nSpace;I++)
2918 p_grad_test_dV[j*nSpace+I] = p_grad_trial[j*nSpace+I]*dV;
2922 for (
int j=0;j<nDOF_v_test_element;j++)
2924 vel_test_dV[j] = vel_test_ref.data()[k*nDOF_v_trial_element+j]*dV;
2925 for (
int I=0;I<nSpace;I++)
2927 vel_grad_test_dV[j*nSpace+I] = vel_grad_trial[j*nSpace+I]*dV;
2932 double div_mesh_velocity=0.0;
2933 for (
int j=0;j<nDOF_trial_element;j++)
2935 int eN_j=eN*nDOF_trial_element+j;
2936 div_mesh_velocity +=
2937 mesh_velocity_dof.data()[mesh_l2g.data()[eN_j]*3+0]*p_grad_trial[j*nSpace+0] +
2938 mesh_velocity_dof.data()[mesh_l2g.data()[eN_j]*3+1]*p_grad_trial[j*nSpace+1] +
2939 mesh_velocity_dof.data()[mesh_l2g.data()[eN_j]*3+2]*p_grad_trial[j*nSpace+2];
2941 mesh_volume_conservation_element += (alphaBDF*(dV-q_dV_last.data()[eN_k])/dV - div_mesh_velocity)*dV;
2942 div_mesh_velocity =
DM3*div_mesh_velocity + (1.0-
DM3)*alphaBDF*(dV-q_dV_last.data()[eN_k])/dV;
2944 porosity = q_porosity.data()[eN_k];
2946 q_velocity.data()[eN_k_nSpace+0]=
u;
2947 q_velocity.data()[eN_k_nSpace+1]=
v;
2948 q_velocity.data()[eN_k_nSpace+2]=
w;
2949 q_x.data()[eN_k_3d + 0] = x;
2950 q_x.data()[eN_k_3d + 1] = y;
2951 q_x.data()[eN_k_3d + 2] =
z;
2952 double ball_n[nSpace];
2953 if (use_ball_as_particle == 1 && nParticles > 0)
2955 int ball_index=
get_distance_to_ball(nParticles, ball_center.data(), ball_radius.data(),x,y,
z,distance_to_solids.data()[eN_k]);
2956 get_normal_to_ith_ball(nParticles, ball_center.data(), ball_radius.data(),ball_index,x,y,
z,ball_n[0],ball_n[1],ball_n[2]);
2963 phi_solid.data()[eN_k] = distance_to_solids.data()[eN_k];
2964 const double particle_eps = particle_epsFact*(useMetrics*h_phi+(1.0-useMetrics)*elementDiameter.data()[eN]);
2968 const double H_s =
gf_s.
H(particle_eps,phi_solid.data()[eN_k]);
2969 const double D_s =
gf_s.
D(particle_eps,phi_solid.data()[eN_k]);
2971 double p_e = q_u_0.data()[eN_k] - p,
2972 u_e = q_u_1.data()[eN_k] -
u,
2973 v_e = q_u_2.data()[eN_k] -
v,
2974 w_e = q_u_3.data()[eN_k] -
w,
2975 velocity_e = sqrt(u_e*u_e + v_e*v_e + w_e*w_e);
2988 if (fluid_phase == 0)
2999 else if (icase == -1)
3004 else if (icase == 1)
3014 double H = (1.0-useVF)*
gf.
H(eps_rho,
phi[eN_k]) + useVF*fmin(1.0,fmax(0.0,vf[eN_k]));
3015 double ImH = (1.0-useVF)*
gf.
ImH(eps_rho,
phi[eN_k]) + useVF*(1.0-fmin(1.0,fmax(0.0,vf[eN_k])));
3024 elementDiameter.data()[eN],
3025 smagorinskyConstant,
3026 turbulenceClosureModel,
3031 &normal_phi.data()[eN_k_nSpace],
3032 kappa_phi.data()[eN_k],
3035 phi_solid.data()[eN_k],
3054 q_eddy_viscosity.data()[eN_k],
3055 q_eddy_viscosity_last.data()[eN_k],
3108 forcex.data()[eN_k],
3109 forcey.data()[eN_k],
3110 forcez.data()[eN_k]);
3111 q_rho.data()[eN_k] = rho;
3113 mass_source = q_mass_source.data()[eN_k];
3120 q_dragAlpha.data()[eN_k],
3121 q_dragBeta.data()[eN_k],
3134 q_velocity_sge.data()[eN_k_nSpace+0],
3135 q_velocity_sge.data()[eN_k_nSpace+1],
3136 q_velocity_sge.data()[eN_k_nSpace+2],
3137 eps_porous.data()[elementFlags.data()[eN]],
3138 phi_porous.data()[eN_k],
3139 q_velocity_porous.data()[eN_k_nSpace+0],
3140 q_velocity_porous.data()[eN_k_nSpace+1],
3141 q_velocity_porous.data()[eN_k_nSpace+2],
3149 if (turbulenceClosureModel >= 3)
3151 const double c_mu = 0.09;
3153 turbulenceClosureModel,
3165 q_turb_var_0.data()[eN_k],
3166 q_turb_var_1.data()[eN_k],
3167 &q_turb_var_grad_0.data()[eN_k_nSpace],
3168 q_eddy_viscosity.data()[eN_k],
3185 if (NONCONSERVATIVE_FORM > 0.0)
3187 mom_u_ham -= MOVING_DOMAIN*dmom_u_acc_u*(grad_u[0]*
xt + grad_u[1]*yt + grad_u[2]*zt);
3188 dmom_u_ham_grad_u[0] -= MOVING_DOMAIN*dmom_u_acc_u*
xt;
3189 dmom_u_ham_grad_u[1] -= MOVING_DOMAIN*dmom_u_acc_u*yt;
3190 dmom_u_ham_grad_u[2] -= MOVING_DOMAIN*dmom_u_acc_u*zt;
3194 mom_u_adv[0] -= MOVING_DOMAIN*mom_u_acc*
xt;
3195 mom_u_adv[1] -= MOVING_DOMAIN*mom_u_acc*yt;
3196 mom_u_adv[2] -= MOVING_DOMAIN*mom_u_acc*zt;
3197 dmom_u_adv_u[0] -= MOVING_DOMAIN*dmom_u_acc_u*
xt;
3198 dmom_u_adv_u[1] -= MOVING_DOMAIN*dmom_u_acc_u*yt;
3199 dmom_u_adv_u[2] -= MOVING_DOMAIN*dmom_u_acc_u*zt;
3202 if (NONCONSERVATIVE_FORM > 0.0)
3204 mom_v_ham -= MOVING_DOMAIN*dmom_v_acc_v*(grad_v[0]*
xt + grad_v[1]*yt + grad_v[2]*zt);
3205 dmom_v_ham_grad_v[0] -= MOVING_DOMAIN*dmom_v_acc_v*
xt;
3206 dmom_v_ham_grad_v[1] -= MOVING_DOMAIN*dmom_v_acc_v*yt;
3207 dmom_v_ham_grad_v[2] -= MOVING_DOMAIN*dmom_v_acc_v*zt;
3211 mom_v_adv[0] -= MOVING_DOMAIN*mom_v_acc*
xt;
3212 mom_v_adv[1] -= MOVING_DOMAIN*mom_v_acc*yt;
3213 mom_v_adv[2] -= MOVING_DOMAIN*mom_v_acc*zt;
3214 dmom_v_adv_v[0] -= MOVING_DOMAIN*dmom_v_acc_v*
xt;
3215 dmom_v_adv_v[1] -= MOVING_DOMAIN*dmom_v_acc_v*yt;
3216 dmom_v_adv_v[2] -= MOVING_DOMAIN*dmom_v_acc_v*zt;
3219 if (NONCONSERVATIVE_FORM > 0.0)
3221 mom_w_ham -= MOVING_DOMAIN*dmom_w_acc_w*(grad_w[0]*
xt + grad_w[1]*yt + grad_w[2]*zt);
3222 dmom_w_ham_grad_w[0] -= MOVING_DOMAIN*dmom_w_acc_w*
xt;
3223 dmom_w_ham_grad_w[1] -= MOVING_DOMAIN*dmom_w_acc_w*yt;
3224 dmom_w_ham_grad_w[2] -= MOVING_DOMAIN*dmom_w_acc_w*zt;
3228 mom_w_adv[0] -= MOVING_DOMAIN*mom_w_acc*
xt;
3229 mom_w_adv[1] -= MOVING_DOMAIN*mom_w_acc*yt;
3230 mom_w_adv[2] -= MOVING_DOMAIN*mom_w_acc*zt;
3231 dmom_w_adv_w[0] -= MOVING_DOMAIN*dmom_w_acc_w*
xt;
3232 dmom_w_adv_w[1] -= MOVING_DOMAIN*dmom_w_acc_w*yt;
3233 dmom_w_adv_w[2] -= MOVING_DOMAIN*dmom_w_acc_w*zt;
3238 if (q_dV_last.data()[eN_k] <= -100)
3239 q_dV_last.data()[eN_k] = dV;
3240 q_dV.data()[eN_k] = dV;
3242 q_mom_u_acc_beta_bdf.data()[eN_k]*q_dV_last.data()[eN_k]/dV,
3248 q_mom_v_acc_beta_bdf.data()[eN_k]*q_dV_last.data()[eN_k]/dV,
3254 q_mom_w_acc_beta_bdf.data()[eN_k]*q_dV_last.data()[eN_k]/dV,
3260 if (NONCONSERVATIVE_FORM > 0.0)
3262 mom_u_acc_t *= dmom_u_acc_u;
3263 mom_v_acc_t *= dmom_v_acc_v;
3264 mom_w_acc_t *= dmom_w_acc_w;
3270 pdeResidual_p =
ck.Advection_strong(dmass_adv_u,grad_u) +
3271 ck.Advection_strong(dmass_adv_v,grad_v) +
3272 ck.Advection_strong(dmass_adv_w,grad_w) +
3273 DM2*MOVING_DOMAIN*
ck.Reaction_strong(alphaBDF*(dV-q_dV_last.data()[eN_k])/dV - div_mesh_velocity) +
3274 ck.Reaction_strong(mass_source);
3276 if (NONCONSERVATIVE_FORM > 0.0)
3278 dmom_adv_sge[0] = 0.0;
3279 dmom_adv_sge[1] = 0.0;
3280 dmom_adv_sge[2] = 0.0;
3281 dmom_ham_grad_sge[0] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+0] - MOVING_DOMAIN*
xt);
3282 dmom_ham_grad_sge[1] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+1] - MOVING_DOMAIN*yt);
3283 dmom_ham_grad_sge[2] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+2] - MOVING_DOMAIN*zt);
3287 dmom_adv_sge[0] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+0] - MOVING_DOMAIN*
xt);
3288 dmom_adv_sge[1] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+1] - MOVING_DOMAIN*yt);
3289 dmom_adv_sge[2] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+2] - MOVING_DOMAIN*zt);
3290 dmom_ham_grad_sge[0] = 0.0;
3291 dmom_ham_grad_sge[1] = 0.0;
3292 dmom_ham_grad_sge[2] = 0.0;
3294 double mv_tau[nSpace]=
ZEROVEC;
3295 mv_tau[0] = dmom_adv_sge[0] + dmom_ham_grad_sge[0];
3296 mv_tau[1] = dmom_adv_sge[1] + dmom_ham_grad_sge[1];
3297 mv_tau[2] = dmom_adv_sge[2] + dmom_ham_grad_sge[2];
3299 pdeResidual_u =
ck.Mass_strong(mom_u_acc_t) +
3300 ck.Advection_strong(dmom_adv_sge,grad_u) +
3301 ck.Hamiltonian_strong(dmom_ham_grad_sge,grad_u) +
3302 ck.Hamiltonian_strong(dmom_u_ham_grad_p,grad_p) +
3303 ck.Reaction_strong(mom_u_source) -
3304 ck.Reaction_strong(dmom_u_acc_u*
u*div_mesh_velocity);
3306 pdeResidual_v =
ck.Mass_strong(mom_v_acc_t) +
3307 ck.Advection_strong(dmom_adv_sge,grad_v) +
3308 ck.Hamiltonian_strong(dmom_ham_grad_sge,grad_v) +
3309 ck.Hamiltonian_strong(dmom_v_ham_grad_p,grad_p) +
3310 ck.Reaction_strong(mom_v_source) -
3311 ck.Reaction_strong(dmom_v_acc_v*
v*div_mesh_velocity);
3313 pdeResidual_w =
ck.Mass_strong(mom_w_acc_t) +
3314 ck.Advection_strong(dmom_adv_sge,grad_w) +
3315 ck.Hamiltonian_strong(dmom_ham_grad_sge,grad_w) +
3316 ck.Hamiltonian_strong(dmom_w_ham_grad_p,grad_p) +
3317 ck.Reaction_strong(mom_w_source) -
3318 ck.Reaction_strong(dmom_w_acc_w*
w*div_mesh_velocity);
3322 double tmpR=dmom_u_acc_u_t + dmom_u_source[0];
3324 elementDiameter.data()[eN],
3329 dmom_u_ham_grad_p[0],
3332 q_cfl.data()[eN_k]);
3339 dmom_u_ham_grad_p[0],
3342 q_cfl.data()[eN_k]);
3344 tau_v = useMetrics*tau_v1+(1.0-useMetrics)*tau_v0;
3345 tau_p = useMetrics*tau_p1+(1.0-useMetrics)*tau_p0;
3358 dmom_adv_star[0] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+0] - MOVING_DOMAIN*
xt + useRBLES*subgridError_u);
3359 dmom_adv_star[1] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+1] - MOVING_DOMAIN*yt + useRBLES*subgridError_v);
3360 dmom_adv_star[2] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+2] - MOVING_DOMAIN*zt + useRBLES*subgridError_w);
3362 mom_u_adv[0] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_u*q_velocity_sge.data()[eN_k_nSpace+0]);
3363 mom_u_adv[1] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_v*q_velocity_sge.data()[eN_k_nSpace+0]);
3364 mom_u_adv[2] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_w*q_velocity_sge.data()[eN_k_nSpace+0]);
3366 mom_v_adv[0] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_u*q_velocity_sge.data()[eN_k_nSpace+1]);
3367 mom_v_adv[1] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_v*q_velocity_sge.data()[eN_k_nSpace+1]);
3368 mom_v_adv[2] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_w*q_velocity_sge.data()[eN_k_nSpace+1]);
3370 mom_w_adv[0] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_u*q_velocity_sge.data()[eN_k_nSpace+2]);
3371 mom_w_adv[1] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_v*q_velocity_sge.data()[eN_k_nSpace+2]);
3372 mom_w_adv[2] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_w*q_velocity_sge.data()[eN_k_nSpace+2]);
3375 for (
int i=0;i<nDOF_test_element;i++)
3377 int i_nSpace = i*nSpace;
3378 Lstar_u_p[i]=
ck.Advection_adjoint(dmass_adv_u,&p_grad_test_dV[i_nSpace]);
3379 Lstar_v_p[i]=
ck.Advection_adjoint(dmass_adv_v,&p_grad_test_dV[i_nSpace]);
3380 Lstar_w_p[i]=
ck.Advection_adjoint(dmass_adv_w,&p_grad_test_dV[i_nSpace]);
3382 for (
int i=0;i<nDOF_v_test_element;i++)
3384 int i_nSpace = i*nSpace;
3386 Lstar_u_u[i]=
ck.Advection_adjoint(dmom_adv_star,&vel_grad_test_dV[i_nSpace]);
3387 Lstar_v_v[i]=
ck.Advection_adjoint(dmom_adv_star,&vel_grad_test_dV[i_nSpace]);
3388 Lstar_w_w[i]=
ck.Advection_adjoint(dmom_adv_star,&vel_grad_test_dV[i_nSpace]);
3389 Lstar_p_u[i]=
ck.Hamiltonian_adjoint(dmom_u_ham_grad_p,&vel_grad_test_dV[i_nSpace]);
3390 Lstar_p_v[i]=
ck.Hamiltonian_adjoint(dmom_v_ham_grad_p,&vel_grad_test_dV[i_nSpace]);
3391 Lstar_p_w[i]=
ck.Hamiltonian_adjoint(dmom_w_ham_grad_p,&vel_grad_test_dV[i_nSpace]);
3394 Lstar_u_u[i]+=
ck.Reaction_adjoint(dmom_u_source[0],vel_test_dV[i]);
3395 Lstar_v_v[i]+=
ck.Reaction_adjoint(dmom_v_source[1],vel_test_dV[i]);
3396 Lstar_w_w[i]+=
ck.Reaction_adjoint(dmom_w_source[2],vel_test_dV[i]);
3400 norm_Rv = sqrt(pdeResidual_u*pdeResidual_u + pdeResidual_v*pdeResidual_v + pdeResidual_w*pdeResidual_w);
3401 q_numDiff_u.data()[eN_k] = C_dc*norm_Rv*(useMetrics/sqrt(G_dd_G+1.0e-12) +
3402 (1.0-useMetrics)*hFactor*hFactor*elementDiameter.data()[eN]*elementDiameter.data()[eN]);
3403 q_numDiff_v.data()[eN_k] = q_numDiff_u.data()[eN_k];
3404 q_numDiff_w.data()[eN_k] = q_numDiff_u.data()[eN_k];
3405 numDiffMax = std::fmax(q_numDiff_u.data()[eN_k], numDiffMax);
3409 double level_set_normal[nSpace];
3413 double norm_exact=0.0,norm_cut=0.0;
3414 if (use_ball_as_particle)
3416 for (
int I=0;I<nSpace;I++)
3420 norm_cut += level_set_normal[I]*level_set_normal[I];
3421 norm_exact += ball_n[I]*ball_n[I];
3426 for (
int I=0;I<nSpace;I++)
3430 norm_cut += level_set_normal[I]*level_set_normal[I];
3431 norm_exact += particle_signed_distance_normals.data()[eN_k_3d+I]*particle_signed_distance_normals.data()[eN_k_3d+I];
3434 norm_cut = std::sqrt(norm_cut);
3435 norm_exact = std::sqrt(norm_exact);
3436 assert(std::fabs(1.0-norm_cut) < 1.0e-8);
3437 assert(std::fabs(1.0-norm_exact) < 1.0e-8);
3439 for (
int I=0;I<nSpace;I++)
3440 level_set_normal[I]*=-1.0;
3450 if (use_ball_as_particle)
3451 for (
int I=0;I<nSpace;I++)
3452 level_set_normal[I] = ball_n[I];
3454 for (
int I=0;I<nSpace;I++)
3455 level_set_normal[I] = particle_signed_distance_normals.data()[eN_k_3d+I];
3458 NONCONSERVATIVE_FORM,
3459 eN < nElements_owned,
3463 nQuadraturePoints_global,
3464 &particle_signed_distances.data()[eN_k],
3466 &particle_velocities.data()[eN_k_3d],
3467 particle_centroids.data(),
3468 use_ball_as_particle,
3471 ball_velocity.data(),
3472 ball_angular_velocity.data(),
3473 ball_density.data(),
3475 particle_penalty_constant/h_phi,
3494 q_velocity_sge.data()[eN_k_nSpace+0],
3495 q_velocity_sge.data()[eN_k_nSpace+1],
3496 q_velocity_sge.data()[eN_k_nSpace+2],
3515 dmom_u_ham_grad_u_s,
3516 dmom_u_ham_grad_v_s,
3517 dmom_u_ham_grad_w_s,
3522 dmom_v_ham_grad_u_s,
3523 dmom_v_ham_grad_v_s,
3524 dmom_v_ham_grad_w_s,
3529 dmom_w_ham_grad_u_s,
3530 dmom_w_ham_grad_v_s,
3531 dmom_w_ham_grad_w_s,
3539 particle_netForces.data(),
3540 particle_netMoments.data(),
3541 particle_surfaceArea.data(),
3542 particle_surfaceArea_projected.data(),
3543 projection_direction.data(),
3544 particle_volume.data());
3560 q_mom_u_acc.data()[eN_k] = mom_u_acc;
3561 q_mom_v_acc.data()[eN_k] = mom_v_acc;
3562 q_mom_w_acc.data()[eN_k] = mom_w_acc;
3564 q_mass_adv.data()[eN_k_nSpace+0] =
u;
3565 q_mass_adv.data()[eN_k_nSpace+1] =
v;
3566 q_mass_adv.data()[eN_k_nSpace+2] =
w;
3570 if (use_ball_as_particle)
3572 q_mom_u_acc.data()[eN_k] = particle_velocities.data()[eN_k_3d+0];
3573 q_mom_v_acc.data()[eN_k] = particle_velocities.data()[eN_k_3d+1];
3574 q_mom_w_acc.data()[eN_k] = particle_velocities.data()[eN_k_3d+2];
3575 q_mass_adv.data()[eN_k_nSpace+0] = particle_velocities.data()[eN_k_3d+0];
3576 q_mass_adv.data()[eN_k_nSpace+1] = particle_velocities.data()[eN_k_3d+1];
3577 q_mass_adv.data()[eN_k_nSpace+2] = particle_velocities.data()[eN_k_3d+2];
3581 q_mom_u_acc.data()[eN_k] = particle_velocities.data()[particle_index*nQuadraturePoints_global + eN_k_3d+0];
3582 q_mom_v_acc.data()[eN_k] = particle_velocities.data()[particle_index*nQuadraturePoints_global + eN_k_3d+1];
3583 q_mom_w_acc.data()[eN_k] = particle_velocities.data()[particle_index*nQuadraturePoints_global + eN_k_3d+2];
3584 q_mass_adv.data()[eN_k_nSpace+0] = particle_velocities.data()[particle_index*nQuadraturePoints_global + eN_k_3d+0];
3585 q_mass_adv.data()[eN_k_nSpace+1] = particle_velocities.data()[particle_index*nQuadraturePoints_global + eN_k_3d+1];
3586 q_mass_adv.data()[eN_k_nSpace+2] = particle_velocities.data()[particle_index*nQuadraturePoints_global + eN_k_3d+2];
3592 double mesh_vel[nSpace];
3599 if (fluid_phase == 0)
3600 H_f =
gf.
ImH(0.,0.);
3614 if ((eN < nElements_owned) && isActiveElement[eN])
3616 domain_volume += H_s*dV*H_f;
3617 p_L1 += fabs(p_e)*H_s*dV*H_f;
3618 u_L1 += fabs(u_e)*H_s*dV*H_f;
3619 v_L1 += fabs(v_e)*H_s*dV*H_f;
3620 w_L1 += fabs(w_e)*H_s*dV*H_f;
3621 velocity_L1 += fabs(velocity_e)*H_s*dV*H_f;
3623 p_L2 += p_e*p_e*H_s*dV*H_f;
3624 u_L2 += u_e*u_e*H_s*dV*H_f;
3625 v_L2 += v_e*v_e*H_s*dV*H_f;
3626 w_L2 += w_e*w_e*H_s*dV*H_f;
3627 velocity_L2 += velocity_e*velocity_e*H_s*dV*H_f;
3628 p_dv += p*H_s*H_f*dV;
3629 pa_dv += q_u_0.data()[eN_k]*H_s*H_f*dV;
3630 total_volume+=H_s*H_f*dV;
3631 total_surface_area+=D_s*H_f*dV;
3632 if (phi_solid.data()[eN_k] >= 0.0)
3634 p_LI = fmax(p_LI, fabs(p_e));
3635 u_LI = fmax(u_LI, fabs(u_e));
3636 v_LI = fmax(v_LI, fabs(v_e));
3637 w_LI = fmax(w_LI, fabs(w_e));
3638 velocity_LI = fmax(velocity_LI, fabs(velocity_e));
3641 for(
int i=0;i<nDOF_test_element;i++)
3643 int i_nSpace=i*nSpace;
3644 elementResidual_mesh[i] += H_s*H_f*(
ck.Reaction_weak(1.0,p_test_dV[i]) -
3645 ck.Reaction_weak(1.0,p_test_dV[i]*q_dV_last.data()[eN_k]/dV) -
3646 ck.Advection_weak(mesh_vel,&p_grad_test_dV[i_nSpace]));
3647 elementResidual_p[i] += H_s*H_f*(
ck.Advection_weak(mass_adv,&p_grad_test_dV[i_nSpace])
3648 +
ck.Hamiltonian_weak(mass_ham, p_test_dV[i])
3649 +
DM*MOVING_DOMAIN*(
ck.Reaction_weak(alphaBDF*1.0,p_test_dV[i]) -
3650 ck.Reaction_weak(alphaBDF*1.0,p_test_dV[i]*q_dV_last.data()[eN_k]/dV) -
3651 ck.Advection_weak(mesh_vel,&p_grad_test_dV[i_nSpace])) +
3652 ck.Reaction_weak(mass_source,p_test_dV[i]));
3653 if (nDOF_test_element == nDOF_v_test_element)
3655 elementResidual_p[i] +=
3656 H_s*H_f*(PRESSURE_PROJECTION_STABILIZATION *
ck.pressureProjection_weak(mom_uu_diff_ten[1], p, p_element_avg, p_test_ref.data()[k*nDOF_test_element+i], dV) +
3657 (1 - PRESSURE_PROJECTION_STABILIZATION) *
ck.SubgridError(subgridError_u,Lstar_u_p[i]) +
3658 (1 - PRESSURE_PROJECTION_STABILIZATION) *
ck.SubgridError(subgridError_v,Lstar_v_p[i]) +
3659 (1 - PRESSURE_PROJECTION_STABILIZATION) *
ck.SubgridError(subgridError_w,Lstar_w_p[i]));
3661 if (PRESSURE_PROJECTION_STABILIZATION==1. && mom_uu_diff_ten[1]==0.)
3663 printf(
"Warning the Bochev-Dohrnmann-Gunzburger stabilization cannot be applied to inviscid fluids.");
3667 if (
gf_s.
D(0.,0.) == 0.0)
3668 assert(mass_source_s == 0.0);
3669 elementResidual_p[i] += H_f*(
ck.Reaction_weak(mass_source_s,p_test_dV[i]));
3672 for(
int i=0;i<nDOF_v_test_element;i++)
3674 int i_nSpace=i*nSpace;
3675 elementResidual_u[i] += H_s*H_f*(
ck.Mass_weak(mom_u_acc_t,vel_test_dV[i]) +
3676 ck.Advection_weak(mom_u_adv,&vel_grad_test_dV[i_nSpace]) +
3677 ck.Diffusion_weak(sdInfo_u_u_rowptr.data(),sdInfo_u_u_colind.data(),mom_uu_diff_ten,grad_u,&vel_grad_test_dV[i_nSpace]) +
3678 ck.Diffusion_weak(sdInfo_u_v_rowptr.data(),sdInfo_u_v_colind.data(),mom_uv_diff_ten,grad_v,&vel_grad_test_dV[i_nSpace]) +
3679 ck.Diffusion_weak(sdInfo_u_w_rowptr.data(),sdInfo_u_w_colind.data(),mom_uw_diff_ten,grad_w,&vel_grad_test_dV[i_nSpace]) +
3680 ck.Reaction_weak(mom_u_source+NONCONSERVATIVE_FORM*dmom_u_acc_u*
u*div_mesh_velocity,vel_test_dV[i]) +
3681 ck.Hamiltonian_weak(mom_u_ham,vel_test_dV[i]) +
3682 MOMENTUM_SGE*VELOCITY_SGE*
ck.SubgridError(subgridError_u,Lstar_u_u[i]) +
3683 ck.NumericalDiffusion(q_numDiff_u_last.data()[eN_k],grad_u,&vel_grad_test_dV[i_nSpace]));
3684 elementResidual_v[i] += H_s*H_f*(
ck.Mass_weak(mom_v_acc_t,vel_test_dV[i]) +
3685 ck.Advection_weak(mom_v_adv,&vel_grad_test_dV[i_nSpace]) +
3686 ck.Diffusion_weak(sdInfo_v_u_rowptr.data(),sdInfo_v_u_colind.data(),mom_vu_diff_ten,grad_u,&vel_grad_test_dV[i_nSpace]) +
3687 ck.Diffusion_weak(sdInfo_v_v_rowptr.data(),sdInfo_v_v_colind.data(),mom_vv_diff_ten,grad_v,&vel_grad_test_dV[i_nSpace]) +
3688 ck.Diffusion_weak(sdInfo_v_w_rowptr.data(),sdInfo_v_w_colind.data(),mom_vw_diff_ten,grad_w,&vel_grad_test_dV[i_nSpace]) +
3689 ck.Reaction_weak(mom_v_source+NONCONSERVATIVE_FORM*dmom_v_acc_v*
v*div_mesh_velocity,vel_test_dV[i]) +
3690 ck.Hamiltonian_weak(mom_v_ham,vel_test_dV[i]) +
3691 MOMENTUM_SGE*VELOCITY_SGE*
ck.SubgridError(subgridError_v,Lstar_v_v[i]) +
3692 ck.NumericalDiffusion(q_numDiff_v_last.data()[eN_k],grad_v,&vel_grad_test_dV[i_nSpace]));
3693 elementResidual_w[i] += H_s*H_f*(
ck.Mass_weak(mom_w_acc_t,vel_test_dV[i]) +
3694 ck.Advection_weak(mom_w_adv,&vel_grad_test_dV[i_nSpace]) +
3695 ck.Diffusion_weak(sdInfo_w_u_rowptr.data(),sdInfo_w_u_colind.data(),mom_wu_diff_ten,grad_u,&vel_grad_test_dV[i_nSpace]) +
3696 ck.Diffusion_weak(sdInfo_w_v_rowptr.data(),sdInfo_w_v_colind.data(),mom_wv_diff_ten,grad_v,&vel_grad_test_dV[i_nSpace]) +
3697 ck.Diffusion_weak(sdInfo_w_w_rowptr.data(),sdInfo_w_w_colind.data(),mom_ww_diff_ten,grad_w,&vel_grad_test_dV[i_nSpace]) +
3698 ck.Reaction_weak(mom_w_source+NONCONSERVATIVE_FORM*dmom_w_acc_w*
w*div_mesh_velocity,vel_test_dV[i]) +
3699 ck.Hamiltonian_weak(mom_w_ham,vel_test_dV[i]) +
3700 MOMENTUM_SGE*VELOCITY_SGE*
ck.SubgridError(subgridError_w,Lstar_w_w[i]) +
3701 ck.NumericalDiffusion(q_numDiff_w_last.data()[eN_k],grad_w,&vel_grad_test_dV[i_nSpace]));
3702 elementResidual_u[i] += H_s*H_f*MOMENTUM_SGE*PRESSURE_SGE*
ck.SubgridError(subgridError_p,Lstar_p_u[i]);
3703 elementResidual_v[i] += H_s*H_f*MOMENTUM_SGE*PRESSURE_SGE*
ck.SubgridError(subgridError_p,Lstar_p_v[i]);
3704 elementResidual_w[i] += H_s*H_f*MOMENTUM_SGE*PRESSURE_SGE*
ck.SubgridError(subgridError_p,Lstar_p_w[i]);
3707 elementResidual_u[i] += H_f*(
ck.Advection_weak(mom_u_adv_s,&vel_grad_test_dV[i_nSpace]) +
3708 ck.Reaction_weak(mom_u_source_s,vel_test_dV[i]) +
3709 ck.Hamiltonian_weak(mom_u_ham_s,vel_test_dV[i]));
3710 elementResidual_v[i] += H_f*(
ck.Advection_weak(mom_v_adv_s,&vel_grad_test_dV[i_nSpace]) +
3711 ck.Reaction_weak(mom_v_source_s,vel_test_dV[i]) +
3712 ck.Hamiltonian_weak(mom_v_ham_s,vel_test_dV[i]));
3713 elementResidual_w[i] += H_f*(
ck.Advection_weak(mom_w_adv_s,&vel_grad_test_dV[i_nSpace]) +
3714 ck.Reaction_weak(mom_w_source_s,vel_test_dV[i]) +
3715 ck.Hamiltonian_weak(mom_w_ham_s,vel_test_dV[i]));
3719 numerical_viscosity.data()[eN_k] = q_numDiff_u_last.data()[eN_k] + MOMENTUM_SGE*VELOCITY_SGE*tau_v*(dmom_adv_star[0]*dmom_adv_star[0]+
3720 dmom_adv_star[1]*dmom_adv_star[1]+
3721 dmom_adv_star[2]*dmom_adv_star[2]);
3722 if (!isActiveElement[eN])
3724 assert(std::fabs(
gf_s.
H(particle_eps,phi_solid.data()[eN_k])) == 0.0);
3725 assert(std::fabs(
gf_s.
D(particle_eps,phi_solid.data()[eN_k])) == 0.0);
3730 for(
int k=0;k<nQuadraturePoints_element;k++)
3733 int eN_k = eN*nQuadraturePoints_element+k;
3734 q_numDiff_u.data()[eN_k] = numDiffMax;
3735 q_numDiff_v.data()[eN_k] = numDiffMax;
3736 q_numDiff_w.data()[eN_k] = numDiffMax;
3742 for(
int i=0;i<nDOF_test_element;i++)
3744 int eN_i=eN*nDOF_test_element+i;
3745 elementResidual_p_save.data()[eN_i] += elementResidual_p[i];
3746 mesh_volume_conservation_element_weak += elementResidual_mesh[i];
3747 if (!isActiveElement[eN])
3749 assert(elementResidual_p[i]==0.0);
3751 globalResidual.data()[offset_p+stride_p*rp_l2g.data()[eN_i]]+=elementResidual_p[i];
3754 isActiveR.data()[offset_p+stride_p*rp_l2g.data()[eN_i]] = 1.0;
3755 isActiveDOF_p.data()[p_l2g.data()[eN_i]] = 1.0;
3758 for(
int i=0;i<nDOF_v_test_element;i++)
3760 int eN_i=eN*nDOF_v_test_element+i;
3761 if (!isActiveElement[eN])
3763 assert(elementResidual_u[i]==0.0);
3764 assert(elementResidual_v[i]==0.0);
3765 assert(elementResidual_w[i]==0.0);
3767 globalResidual.data()[offset_u+stride_u*rvel_l2g.data()[eN_i]]+=elementResidual_u[i];
3768 globalResidual.data()[offset_v+stride_v*rvel_l2g.data()[eN_i]]+=elementResidual_v[i];
3769 globalResidual.data()[offset_w+stride_w*rvel_l2g.data()[eN_i]]+=elementResidual_w[i];
3772 isActiveR.data()[offset_u+stride_u*rvel_l2g.data()[eN_i]] = 1.0;
3773 isActiveR.data()[offset_v+stride_v*rvel_l2g.data()[eN_i]] = 1.0;
3774 isActiveR.data()[offset_w+stride_w*rvel_l2g.data()[eN_i]] = 1.0;
3775 isActiveDOF_vel.data()[vel_l2g.data()[eN_i]] = 1.0;
3777 double x = mesh_dof.data()[3*mesh_l2g.data()[eN_i]+0],
3778 y = mesh_dof.data()[3*mesh_l2g.data()[eN_i]+1],
3779 z = mesh_dof.data()[3*mesh_l2g.data()[eN_i]+2];
3782 ball_velocity.data(),ball_angular_velocity.data(),
3783 particle_index,x,y,
z,
3784 ball_u.data()[vel_l2g.data()[eN_i]], ball_v.data()[vel_l2g.data()[eN_i]], ball_w.data()[vel_l2g.data()[eN_i]]);
3786 mesh_volume_conservation += mesh_volume_conservation_element;
3787 mesh_volume_conservation_weak += mesh_volume_conservation_element_weak;
3788 mesh_volume_conservation_err_max=fmax(mesh_volume_conservation_err_max,fabs(mesh_volume_conservation_element));
3789 mesh_volume_conservation_err_max_weak=fmax(mesh_volume_conservation_err_max_weak,fabs(mesh_volume_conservation_element_weak));
3794 if(isActiveElement[elementBoundaryElementsArray[(*it)*2+0]] && isActiveElement[elementBoundaryElementsArray[(*it)*2+1]])
3796 std::map<int,double> DWp_Dn_jump, DW_Dn_jump;
3797 double gamma_cutfem=ghost_penalty_constant,gamma_cutfem_p=ghost_penalty_constant,h_cutfem=elementBoundaryDiameter.data()[*it];
3798 int eN_nDOF_v_trial_element = elementBoundaryElementsArray.data()[(*it)*2+0]*nDOF_v_trial_element;
3802 for (
int i_offset=1;i_offset<nDOF_v_trial_element;i_offset++)
3805 double u=u_old_dof.data()[vel_l2g.data()[eN_nDOF_v_trial_element+i]],
3806 v=v_old_dof.data()[vel_l2g.data()[eN_nDOF_v_trial_element+i]],
3807 w=w_old_dof.data()[vel_l2g.data()[eN_nDOF_v_trial_element+i]];
3808 norm_v=fmax(norm_v,sqrt(
u*
u+
v*
v+
w*
w));
3810 double gamma_v_dim =
rho_0*(
nu_0 + norm_v*h_cutfem + alphaBDF*h_cutfem*h_cutfem);
3811 gamma_cutfem_p *= h_cutfem*h_cutfem/gamma_v_dim;
3812 if (NONCONSERVATIVE_FORM)
3813 gamma_cutfem*=gamma_v_dim;
3815 gamma_cutfem*=(gamma_v_dim/
rho_0);
3816 for (
int kb=0;kb<nQuadraturePoints_elementBoundary;kb++)
3818 double Dp_Dn_jump=0.0, Du_Dn_jump=0.0, Dv_Dn_jump=0.0, Dw_Dn_jump=0.0, dS;
3819 for (
int eN_side=0;eN_side < 2; eN_side++)
3822 eN = elementBoundaryElementsArray.data()[ebN*2+eN_side];
3823 for (
int i=0;i<nDOF_test_element;i++)
3825 DWp_Dn_jump[rp_l2g.data()[eN*nDOF_test_element+i]] = 0.0;
3827 for (
int i=0;i<nDOF_v_test_element;i++)
3829 DW_Dn_jump[rvel_l2g.data()[eN*nDOF_v_test_element+i]] = 0.0;
3832 for (
int eN_side=0;eN_side < 2; eN_side++)
3835 eN = elementBoundaryElementsArray[ebN*2+eN_side],
3836 ebN_local = elementBoundaryLocalElementBoundariesArray[ebN*2+eN_side],
3837 eN_nDOF_trial_element = eN*nDOF_trial_element,
3838 eN_nDOF_v_trial_element = eN*nDOF_v_trial_element,
3839 ebN_local_kb = ebN_local*nQuadraturePoints_elementBoundary+kb,
3840 ebN_local_kb_nSpace = ebN_local_kb*nSpace;
3849 jac_int[nSpace*nSpace],
3851 jacInv_int[nSpace*nSpace],
3852 boundaryJac[nSpace*(nSpace-1)],
3853 metricTensor[(nSpace-1)*(nSpace-1)],
3854 metricTensorDetSqrt,
3855 p_test_dS[nDOF_test_element],vel_test_dS[nDOF_v_test_element],
3856 p_grad_trial_trace[nDOF_trial_element*nSpace],vel_grad_trial_trace[nDOF_v_trial_element*nSpace],
3857 p_grad_test_dS[nDOF_trial_element*nSpace],vel_grad_test_dS[nDOF_v_trial_element*nSpace],
3858 normal[nSpace],x_int,y_int,z_int,xt_int,yt_int,zt_int,integralScaling,
3859 G[nSpace*nSpace],G_dd_G,tr_G,h_phi,h_penalty,penalty,
3860 force_x,force_y,force_z,force_p_x,force_p_y,force_p_z,force_v_x,force_v_y,force_v_z,r_x,r_y,r_z;
3862 ck.calculateMapping_elementBoundary(eN,
3868 mesh_trial_trace_ref.data(),
3869 mesh_grad_trial_trace_ref.data(),
3870 boundaryJac_ref.data(),
3876 metricTensorDetSqrt,
3881 ck.calculateMappingVelocity_elementBoundary(eN,
3885 mesh_velocity_dof.data(),
3887 mesh_trial_trace_ref.data(),
3888 xt_int,yt_int,zt_int,
3893 dS = metricTensorDetSqrt*dS_ref.data()[kb];
3896 ck.gradTrialFromRef(&p_grad_trial_trace_ref.data()[ebN_local_kb_nSpace*nDOF_trial_element],jacInv_int,p_grad_trial_trace);
3897 ck_v.gradTrialFromRef(&vel_grad_trial_trace_ref.data()[ebN_local_kb_nSpace*nDOF_v_trial_element],jacInv_int,vel_grad_trial_trace);
3899 ck.valFromDOF(p_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],&p_trial_trace_ref.data()[ebN_local_kb*nDOF_test_element],p_int);
3900 ck_v.valFromDOF(u_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],u_int);
3901 ck_v.valFromDOF(v_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],v_int);
3902 ck_v.valFromDOF(w_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],w_int);
3903 ck.gradFromDOF(p_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],p_grad_trial_trace,grad_p_int);
3904 ck_v.gradFromDOF(u_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_u_int);
3905 ck_v.gradFromDOF(v_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_v_int);
3906 ck_v.gradFromDOF(w_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_w_int);
3907 for (
int I=0;I<nSpace;I++)
3909 Dp_Dn_jump += grad_p_int[I]*normal[I];
3910 Du_Dn_jump += grad_u_int[I]*normal[I];
3911 Dv_Dn_jump += grad_v_int[I]*normal[I];
3912 Dw_Dn_jump += grad_w_int[I]*normal[I];
3914 for (
int i=0;i<nDOF_test_element;i++)
3916 for (
int I=0;I<nSpace;I++)
3917 DWp_Dn_jump[rp_l2g[eN_nDOF_trial_element+i]] += p_grad_trial_trace[i*nSpace+I]*normal[I];
3919 for (
int i=0;i<nDOF_v_test_element;i++)
3921 for (
int I=0;I<nSpace;I++)
3922 DW_Dn_jump[rvel_l2g[eN_nDOF_v_trial_element+i]] += vel_grad_trial_trace[i*nSpace+I]*normal[I];
3925 for (std::map<int,double>::iterator W_it=DWp_Dn_jump.begin(); W_it!=DWp_Dn_jump.end(); ++W_it)
3927 int i_global = W_it->first;
3928 double DWp_Dn_jump_i = W_it->second;
3929 globalResidual.data()[offset_p+stride_p*i_global]+=gamma_cutfem_p*h_cutfem*Dp_Dn_jump*DWp_Dn_jump_i*dS;
3931 for (std::map<int,double>::iterator W_it=DW_Dn_jump.begin(); W_it!=DW_Dn_jump.end(); ++W_it)
3933 int i_global = W_it->first;
3934 double DW_Dn_jump_i = W_it->second;
3935 globalResidual.data()[offset_u+stride_u*i_global]+=gamma_cutfem*h_cutfem*Du_Dn_jump*DW_Dn_jump_i*dS;
3936 globalResidual.data()[offset_v+stride_v*i_global]+=gamma_cutfem*h_cutfem*Dv_Dn_jump*DW_Dn_jump_i*dS;
3937 globalResidual.data()[offset_w+stride_w*i_global]+=gamma_cutfem*h_cutfem*Dw_Dn_jump*DW_Dn_jump_i*dS;
3953 for (
int ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
3955 int ebN = exteriorElementBoundariesArray.data()[ebNE],
3956 eN = elementBoundaryElementsArray.data()[ebN*2+0],
3957 ebN_local = elementBoundaryLocalElementBoundariesArray.data()[ebN*2+0],
3958 eN_nDOF_trial_element = eN*nDOF_trial_element,
3959 eN_nDOF_v_trial_element = eN*nDOF_v_trial_element;
3960 if (boundaryFlags[ebN] < 1)
3962 double elementResidual_mesh[nDOF_test_element],
3963 elementResidual_p[nDOF_test_element],
3964 elementResidual_u[nDOF_v_test_element],
3965 elementResidual_v[nDOF_v_test_element],
3966 elementResidual_w[nDOF_v_test_element],
3968 for (
int i=0;i<nDOF_test_element;i++)
3970 elementResidual_mesh[i]=0.0;
3971 elementResidual_p[i]=0.0;
3973 for (
int i=0;i<nDOF_v_test_element;i++)
3975 elementResidual_u[i]=0.0;
3976 elementResidual_v[i]=0.0;
3977 elementResidual_w[i]=0.0;
3979 double element_phi[nDOF_mesh_trial_element], element_phi_s[nDOF_mesh_trial_element];
3980 for (
int j=0;j<nDOF_mesh_trial_element;j++)
3982 int eN_j = eN*nDOF_mesh_trial_element+j;
3983 element_phi[j] = phi_nodes.data()[p_l2g.data()[eN_j]];
3984 element_phi_s[j] = phi_solid_nodes[p_l2g.data()[eN_j]];
3986 double element_nodes[nDOF_mesh_trial_element*3];
3987 for (
int i=0;i<nDOF_mesh_trial_element;i++)
3989 int eN_i=eN*nDOF_mesh_trial_element+i;
3990 for(
int I=0;I<3;I++)
3991 element_nodes[i*3 + I] = mesh_dof[mesh_l2g.data()[eN_i]*3 + I];
3993 double mesh_dof_ref[nDOF_mesh_trial_element*3]={0.,0.,0.,1.,0.,0.,0.,1.,0.,0.,0.,1.};
3994 double xb_ref_calc[nQuadraturePoints_elementBoundary*3];
3995 for (
int kb=0;kb<nQuadraturePoints_elementBoundary;kb++)
3997 double x=0.0,y=0.0,
z=0.0;
3998 for (
int j=0;j<nDOF_mesh_trial_element;j++)
4000 int ebN_local_kb = ebN_local*nQuadraturePoints_elementBoundary+kb;
4001 int ebN_local_kb_j = ebN_local_kb*nDOF_mesh_trial_element+j;
4002 x += mesh_dof_ref[j*3+0]*mesh_trial_trace_ref.data()[ebN_local_kb_j];
4003 y += mesh_dof_ref[j*3+1]*mesh_trial_trace_ref.data()[ebN_local_kb_j];
4004 z += mesh_dof_ref[j*3+2]*mesh_trial_trace_ref.data()[ebN_local_kb_j];
4006 xb_ref_calc[3*kb+0] = x;
4007 xb_ref_calc[3*kb+1] = y;
4008 xb_ref_calc[3*kb+2] =
z;
4010 int icase_s =
gf_s.
calculate(element_phi_s, element_nodes, xb_ref_calc,
true);
4012 int icase =
gf.
calculate(element_phi, element_nodes, xb_ref.data(), -
rho_1*g.data()[1], -
rho_0*g.data()[1],
true,
true);
4014 int icase =
gf.
calculate(element_phi, element_nodes, xb_ref.data(), 1.0,1.0,
true,
false);
4017 for (
int kb=0;kb<nQuadraturePoints_elementBoundary;kb++)
4019 int ebNE_kb = ebNE*nQuadraturePoints_elementBoundary+kb,
4020 ebNE_kb_nSpace = ebNE_kb*nSpace,
4021 ebN_local_kb = ebN_local*nQuadraturePoints_elementBoundary+kb,
4022 ebN_local_kb_nSpace = ebN_local_kb*nSpace;
4023 double phi_s_ext=0.0,
4032 p_old=0.0,u_old=0.0,v_old=0.0,w_old=0.0,
4035 dmom_u_acc_u_ext=0.0,
4037 dmom_v_acc_v_ext=0.0,
4039 dmom_w_acc_w_ext=0.0,
4041 dmass_adv_u_ext[nSpace]=
ZEROVEC,
4042 dmass_adv_v_ext[nSpace]=
ZEROVEC,
4043 dmass_adv_w_ext[nSpace]=
ZEROVEC,
4044 mom_u_adv_ext[nSpace]=
ZEROVEC,
4045 dmom_u_adv_u_ext[nSpace]=
ZEROVEC,
4046 dmom_u_adv_v_ext[nSpace]=
ZEROVEC,
4047 dmom_u_adv_w_ext[nSpace]=
ZEROVEC,
4048 mom_v_adv_ext[nSpace]=
ZEROVEC,
4049 dmom_v_adv_u_ext[nSpace]=
ZEROVEC,
4050 dmom_v_adv_v_ext[nSpace]=
ZEROVEC,
4051 dmom_v_adv_w_ext[nSpace]=
ZEROVEC,
4052 mom_w_adv_ext[nSpace]=
ZEROVEC,
4053 dmom_w_adv_u_ext[nSpace]=
ZEROVEC,
4054 dmom_w_adv_v_ext[nSpace]=
ZEROVEC,
4055 dmom_w_adv_w_ext[nSpace]=
ZEROVEC,
4056 mom_uu_diff_ten_ext[nSpace]=
ZEROVEC,
4057 mom_vv_diff_ten_ext[nSpace]=
ZEROVEC,
4058 mom_ww_diff_ten_ext[nSpace]=
ZEROVEC,
4059 mom_uv_diff_ten_ext[1],
4060 mom_uw_diff_ten_ext[1],
4061 mom_vu_diff_ten_ext[1],
4062 mom_vw_diff_ten_ext[1],
4063 mom_wu_diff_ten_ext[1],
4064 mom_wv_diff_ten_ext[1],
4065 mom_u_source_ext=0.0,
4066 mom_v_source_ext=0.0,
4067 mom_w_source_ext=0.0,
4069 dmom_u_ham_grad_p_ext[nSpace]=
ZEROVEC,
4070 dmom_u_ham_grad_u_ext[nSpace]=
ZEROVEC,
4071 dmom_u_ham_u_ext=0.0,
4072 dmom_u_ham_v_ext=0.0,
4073 dmom_u_ham_w_ext=0.0,
4075 dmom_v_ham_grad_p_ext[nSpace]=
ZEROVEC,
4076 dmom_v_ham_grad_v_ext[nSpace]=
ZEROVEC,
4077 dmom_v_ham_u_ext=0.0,
4078 dmom_v_ham_v_ext=0.0,
4079 dmom_v_ham_w_ext=0.0,
4081 dmom_w_ham_grad_p_ext[nSpace]=
ZEROVEC,
4082 dmom_w_ham_grad_w_ext[nSpace]=
ZEROVEC,
4083 dmom_w_ham_u_ext=0.0,
4084 dmom_w_ham_v_ext=0.0,
4085 dmom_w_ham_w_ext=0.0,
4086 dmom_u_adv_p_ext[nSpace]=
ZEROVEC,
4087 dmom_v_adv_p_ext[nSpace]=
ZEROVEC,
4088 dmom_w_adv_p_ext[nSpace]=
ZEROVEC,
4090 flux_mom_u_adv_ext=0.0,
4091 flux_mom_v_adv_ext=0.0,
4092 flux_mom_w_adv_ext=0.0,
4093 flux_mom_uu_diff_ext=0.0,
4094 flux_mom_uv_diff_ext=0.0,
4095 flux_mom_uw_diff_ext=0.0,
4096 flux_mom_vu_diff_ext=0.0,
4097 flux_mom_vv_diff_ext=0.0,
4098 flux_mom_vw_diff_ext=0.0,
4099 flux_mom_wu_diff_ext=0.0,
4100 flux_mom_wv_diff_ext=0.0,
4101 flux_mom_ww_diff_ext=0.0,
4106 bc_mom_u_acc_ext=0.0,
4107 bc_dmom_u_acc_u_ext=0.0,
4108 bc_mom_v_acc_ext=0.0,
4109 bc_dmom_v_acc_v_ext=0.0,
4110 bc_mom_w_acc_ext=0.0,
4111 bc_dmom_w_acc_w_ext=0.0,
4112 bc_mass_adv_ext[nSpace]=
ZEROVEC,
4113 bc_dmass_adv_u_ext[nSpace]=
ZEROVEC,
4114 bc_dmass_adv_v_ext[nSpace]=
ZEROVEC,
4115 bc_dmass_adv_w_ext[nSpace]=
ZEROVEC,
4116 bc_mom_u_adv_ext[nSpace]=
ZEROVEC,
4117 bc_dmom_u_adv_u_ext[nSpace]=
ZEROVEC,
4118 bc_dmom_u_adv_v_ext[nSpace]=
ZEROVEC,
4119 bc_dmom_u_adv_w_ext[nSpace]=
ZEROVEC,
4120 bc_mom_v_adv_ext[nSpace]=
ZEROVEC,
4121 bc_dmom_v_adv_u_ext[nSpace]=
ZEROVEC,
4122 bc_dmom_v_adv_v_ext[nSpace]=
ZEROVEC,
4123 bc_dmom_v_adv_w_ext[nSpace]=
ZEROVEC,
4124 bc_mom_w_adv_ext[nSpace]=
ZEROVEC,
4125 bc_dmom_w_adv_u_ext[nSpace]=
ZEROVEC,
4126 bc_dmom_w_adv_v_ext[nSpace]=
ZEROVEC,
4127 bc_dmom_w_adv_w_ext[nSpace]=
ZEROVEC,
4128 bc_mom_uu_diff_ten_ext[nSpace]=
ZEROVEC,
4129 bc_mom_vv_diff_ten_ext[nSpace]=
ZEROVEC,
4130 bc_mom_ww_diff_ten_ext[nSpace]=
ZEROVEC,
4131 bc_mom_uv_diff_ten_ext[1],
4132 bc_mom_uw_diff_ten_ext[1],
4133 bc_mom_vu_diff_ten_ext[1],
4134 bc_mom_vw_diff_ten_ext[1],
4135 bc_mom_wu_diff_ten_ext[1],
4136 bc_mom_wv_diff_ten_ext[1],
4137 bc_mom_u_source_ext=0.0,
4138 bc_mom_v_source_ext=0.0,
4139 bc_mom_w_source_ext=0.0,
4140 bc_mom_u_ham_ext=0.0,
4141 bc_dmom_u_ham_grad_p_ext[nSpace]=
ZEROVEC,
4142 bc_dmom_u_ham_grad_u_ext[nSpace]=
ZEROVEC,
4143 bc_dmom_u_ham_u_ext=0.0,
4144 bc_dmom_u_ham_v_ext=0.0,
4145 bc_dmom_u_ham_w_ext=0.0,
4146 bc_mom_v_ham_ext=0.0,
4147 bc_dmom_v_ham_grad_p_ext[nSpace]=
ZEROVEC,
4148 bc_dmom_v_ham_grad_v_ext[nSpace]=
ZEROVEC,
4149 bc_dmom_v_ham_u_ext=0.0,
4150 bc_dmom_v_ham_v_ext=0.0,
4151 bc_dmom_v_ham_w_ext=0.0,
4152 bc_mom_w_ham_ext=0.0,
4153 bc_dmom_w_ham_grad_p_ext[nSpace]=
ZEROVEC,
4154 bc_dmom_w_ham_grad_w_ext[nSpace]=
ZEROVEC,
4155 bc_dmom_w_ham_u_ext=0.0,
4156 bc_dmom_w_ham_v_ext=0.0,
4157 bc_dmom_w_ham_w_ext=0.0,
4158 jac_ext[nSpace*nSpace],
4160 jacInv_ext[nSpace*nSpace],
4161 boundaryJac[nSpace*(nSpace-1)],
4162 metricTensor[(nSpace-1)*(nSpace-1)],
4163 metricTensorDetSqrt,
4164 dS,p_test_dS[nDOF_test_element],vel_test_dS[nDOF_v_test_element],
4165 p_grad_trial_trace[nDOF_trial_element*nSpace],vel_grad_trial_trace[nDOF_v_trial_element*nSpace],
4166 vel_grad_test_dS[nDOF_v_trial_element*nSpace],
4167 normal[nSpace],x_ext,y_ext,z_ext,xt_ext,yt_ext,zt_ext,integralScaling,
4171 G[nSpace*nSpace],G_dd_G,tr_G,h_phi,h_penalty,penalty,
4172 force_x,force_y,force_z,force_p_x,force_p_y,force_p_z,force_v_x,force_v_y,force_v_z,r_x,r_y,r_z;
4176 ck.calculateMapping_elementBoundary(eN,
4182 mesh_trial_trace_ref.data(),
4183 mesh_grad_trial_trace_ref.data(),
4184 boundaryJac_ref.data(),
4190 metricTensorDetSqrt,
4194 ck.calculateMappingVelocity_elementBoundary(eN,
4198 mesh_velocity_dof.data(),
4200 mesh_trial_trace_ref.data(),
4201 xt_ext,yt_ext,zt_ext,
4213 dS = metricTensorDetSqrt*dS_ref.data()[kb];
4216 ck.calculateG(jacInv_ext,G,G_dd_G,tr_G);
4217 ck.calculateGScale(G,&ebqe_normal_phi_ext.data()[ebNE_kb_nSpace],h_phi);
4219 eps_rho = epsFact_rho*(useMetrics*h_phi+(1.0-useMetrics)*elementDiameter.data()[eN]);
4220 eps_mu = epsFact_mu *(useMetrics*h_phi+(1.0-useMetrics)*elementDiameter.data()[eN]);
4224 ck.gradTrialFromRef(&p_grad_trial_trace_ref.data()[ebN_local_kb_nSpace*nDOF_trial_element],jacInv_ext,p_grad_trial_trace);
4225 ck_v.gradTrialFromRef(&vel_grad_trial_trace_ref.data()[ebN_local_kb_nSpace*nDOF_v_trial_element],jacInv_ext,vel_grad_trial_trace);
4227 ck.valFromDOF(p_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],&p_trial_trace_ref.data()[ebN_local_kb*nDOF_test_element],p_ext);
4228 ck_v.valFromDOF(u_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],u_ext);
4229 ck_v.valFromDOF(v_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],v_ext);
4230 ck_v.valFromDOF(w_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],w_ext);
4231 ck.valFromDOF(p_old_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],&p_trial_trace_ref.data()[ebN_local_kb*nDOF_test_element],p_old);
4232 ck_v.valFromDOF(u_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],u_old);
4233 ck_v.valFromDOF(v_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],v_old);
4234 ck_v.valFromDOF(w_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],w_old);
4235 ck.gradFromDOF(p_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],p_grad_trial_trace,grad_p_ext);
4236 ck_v.gradFromDOF(u_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_u_ext);
4237 ck_v.gradFromDOF(v_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_v_ext);
4238 ck_v.gradFromDOF(w_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_w_ext);
4239 ck.gradFromDOF(p_old_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],p_grad_trial_trace,grad_p_old);
4240 ck_v.gradFromDOF(u_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_u_old);
4241 ck_v.gradFromDOF(v_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_v_old);
4242 ck_v.gradFromDOF(w_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_w_old);
4243 ck.valFromDOF(phi_solid_nodes.data(),&p_l2g.data()[eN_nDOF_trial_element],&p_trial_trace_ref.data()[ebN_local_kb*nDOF_test_element],phi_s_ext);
4245 for (
int j=0;j<nDOF_test_element;j++)
4247 p_test_dS[j] = p_test_trace_ref.data()[ebN_local_kb*nDOF_test_element+j]*dS;
4249 for (
int j=0;j<nDOF_v_test_element;j++)
4251 vel_test_dS[j] = vel_test_trace_ref.data()[ebN_local_kb*nDOF_v_test_element+j]*dS;
4252 for (
int I=0;I<nSpace;I++)
4253 vel_grad_test_dS[j*nSpace+I] = vel_grad_trial_trace[j*nSpace+I]*dS;
4255 bc_p_ext = isDOFBoundary_p.data()[ebNE_kb]*ebqe_bc_p_ext.data()[ebNE_kb]+(1-isDOFBoundary_p.data()[ebNE_kb])*p_ext;
4257 bc_u_ext = isDOFBoundary_u.data()[ebNE_kb]*(ebqe_bc_u_ext.data()[ebNE_kb] + MOVING_DOMAIN*xt_ext) + (1-isDOFBoundary_u.data()[ebNE_kb])*u_ext;
4258 bc_v_ext = isDOFBoundary_v.data()[ebNE_kb]*(ebqe_bc_v_ext.data()[ebNE_kb] + MOVING_DOMAIN*yt_ext) + (1-isDOFBoundary_v.data()[ebNE_kb])*v_ext;
4259 bc_w_ext = isDOFBoundary_w.data()[ebNE_kb]*(ebqe_bc_w_ext.data()[ebNE_kb] + MOVING_DOMAIN*zt_ext) + (1-isDOFBoundary_w.data()[ebNE_kb])*w_ext;
4261 porosity_ext = ebqe_porosity_ext.data()[ebNE_kb];
4265 double eddy_viscosity_ext(0.),bc_eddy_viscosity_ext(0.);
4266 if (use_ball_as_particle == 1 && nParticles > 0)
4268 get_distance_to_ball(nParticles, ball_center.data(), ball_radius.data(),x_ext,y_ext,z_ext,ebqe_phi_s.data()[ebNE_kb]);
4271 const double particle_eps = particle_epsFact*(useMetrics*h_phi+(1.0-useMetrics)*elementDiameter[eN]);
4274 double H = (1.0-useVF)*
gf.
H(eps_rho,ebqe_phi_ext[ebNE_kb]) + useVF*fmin(1.0,fmax(0.0,ebqe_vf_ext[ebNE_kb]));
4275 double ImH = (1.0-useVF)*
gf.
ImH(eps_rho,ebqe_phi_ext[ebNE_kb]) + useVF*(1.0-fmin(1.0,fmax(0.0,ebqe_vf_ext[ebNE_kb])));
4283 elementDiameter.data()[eN],
4284 smagorinskyConstant,
4285 turbulenceClosureModel,
4288 ebqe_vf_ext.data()[ebNE_kb],
4289 ebqe_phi_ext.data()[ebNE_kb],
4290 &ebqe_normal_phi_ext.data()[ebNE_kb_nSpace],
4291 ebqe_kappa_phi_ext.data()[ebNE_kb],
4295 ebqe_phi_s.data()[ebNE_kb],
4313 ebqe_eddy_viscosity.data()[ebNE_kb],
4314 ebqe_eddy_viscosity_last.data()[ebNE_kb],
4337 mom_uu_diff_ten_ext,
4338 mom_vv_diff_ten_ext,
4339 mom_ww_diff_ten_ext,
4340 mom_uv_diff_ten_ext,
4341 mom_uw_diff_ten_ext,
4342 mom_vu_diff_ten_ext,
4343 mom_vw_diff_ten_ext,
4344 mom_wu_diff_ten_ext,
4345 mom_wv_diff_ten_ext,
4350 dmom_u_ham_grad_p_ext,
4351 dmom_u_ham_grad_u_ext,
4356 dmom_v_ham_grad_p_ext,
4357 dmom_v_ham_grad_v_ext,
4362 dmom_w_ham_grad_p_ext,
4363 dmom_w_ham_grad_w_ext,
4371 H = (1.0-useVF)*
gf.
H(eps_rho,bc_ebqe_phi_ext[ebNE_kb]) + useVF*fmin(1.0,fmax(0.0,bc_ebqe_vf_ext[ebNE_kb]));
4372 ImH = (1.0-useVF)*
gf.
ImH(eps_rho,bc_ebqe_phi_ext[ebNE_kb]) + useVF*(1.0-fmin(1.0,fmax(0.0,bc_ebqe_vf_ext[ebNE_kb])));
4380 elementDiameter.data()[eN],
4381 smagorinskyConstant,
4382 turbulenceClosureModel,
4385 bc_ebqe_vf_ext.data()[ebNE_kb],
4386 bc_ebqe_phi_ext.data()[ebNE_kb],
4387 &ebqe_normal_phi_ext.data()[ebNE_kb_nSpace],
4388 ebqe_kappa_phi_ext.data()[ebNE_kb],
4392 ebqe_phi_s.data()[ebNE_kb],
4410 bc_eddy_viscosity_ext,
4411 ebqe_eddy_viscosity_last.data()[ebNE_kb],
4413 bc_dmom_u_acc_u_ext,
4415 bc_dmom_v_acc_v_ext,
4417 bc_dmom_w_acc_w_ext,
4423 bc_dmom_u_adv_u_ext,
4424 bc_dmom_u_adv_v_ext,
4425 bc_dmom_u_adv_w_ext,
4427 bc_dmom_v_adv_u_ext,
4428 bc_dmom_v_adv_v_ext,
4429 bc_dmom_v_adv_w_ext,
4431 bc_dmom_w_adv_u_ext,
4432 bc_dmom_w_adv_v_ext,
4433 bc_dmom_w_adv_w_ext,
4434 bc_mom_uu_diff_ten_ext,
4435 bc_mom_vv_diff_ten_ext,
4436 bc_mom_ww_diff_ten_ext,
4437 bc_mom_uv_diff_ten_ext,
4438 bc_mom_uw_diff_ten_ext,
4439 bc_mom_vu_diff_ten_ext,
4440 bc_mom_vw_diff_ten_ext,
4441 bc_mom_wu_diff_ten_ext,
4442 bc_mom_wv_diff_ten_ext,
4443 bc_mom_u_source_ext,
4444 bc_mom_v_source_ext,
4445 bc_mom_w_source_ext,
4447 bc_dmom_u_ham_grad_p_ext,
4448 bc_dmom_u_ham_grad_u_ext,
4449 bc_dmom_u_ham_u_ext,
4450 bc_dmom_u_ham_v_ext,
4451 bc_dmom_u_ham_w_ext,
4453 bc_dmom_v_ham_grad_p_ext,
4454 bc_dmom_v_ham_grad_v_ext,
4455 bc_dmom_v_ham_u_ext,
4456 bc_dmom_v_ham_v_ext,
4457 bc_dmom_v_ham_w_ext,
4459 bc_dmom_w_ham_grad_p_ext,
4460 bc_dmom_w_ham_grad_w_ext,
4461 bc_dmom_w_ham_u_ext,
4462 bc_dmom_w_ham_v_ext,
4463 bc_dmom_w_ham_w_ext,
4469 if (turbulenceClosureModel >= 3)
4471 const double turb_var_grad_0_dummy[nSpace] =
ZEROVEC;
4472 const double c_mu = 0.09;
4474 turbulenceClosureModel,
4482 ebqe_vf_ext.data()[ebNE_kb],
4483 ebqe_phi_ext.data()[ebNE_kb],
4486 ebqe_turb_var_0.data()[ebNE_kb],
4487 ebqe_turb_var_1.data()[ebNE_kb],
4488 turb_var_grad_0_dummy,
4489 ebqe_eddy_viscosity.data()[ebNE_kb],
4490 mom_uu_diff_ten_ext,
4491 mom_vv_diff_ten_ext,
4492 mom_ww_diff_ten_ext,
4493 mom_uv_diff_ten_ext,
4494 mom_uw_diff_ten_ext,
4495 mom_vu_diff_ten_ext,
4496 mom_vw_diff_ten_ext,
4497 mom_wu_diff_ten_ext,
4498 mom_wv_diff_ten_ext,
4504 turbulenceClosureModel,
4512 bc_ebqe_vf_ext.data()[ebNE_kb],
4513 bc_ebqe_phi_ext.data()[ebNE_kb],
4516 ebqe_turb_var_0.data()[ebNE_kb],
4517 ebqe_turb_var_1.data()[ebNE_kb],
4518 turb_var_grad_0_dummy,
4519 bc_eddy_viscosity_ext,
4520 bc_mom_uu_diff_ten_ext,
4521 bc_mom_vv_diff_ten_ext,
4522 bc_mom_ww_diff_ten_ext,
4523 bc_mom_uv_diff_ten_ext,
4524 bc_mom_uw_diff_ten_ext,
4525 bc_mom_vu_diff_ten_ext,
4526 bc_mom_vw_diff_ten_ext,
4527 bc_mom_wu_diff_ten_ext,
4528 bc_mom_wv_diff_ten_ext,
4529 bc_mom_u_source_ext,
4530 bc_mom_v_source_ext,
4531 bc_mom_w_source_ext);
4538 if (NONCONSERVATIVE_FORM > 0.0)
4540 mom_u_ham_ext -= MOVING_DOMAIN*dmom_u_acc_u_ext*(grad_u_ext[0]*xt_ext + grad_u_ext[1]*yt_ext + grad_u_ext[2]*zt_ext);
4541 dmom_u_ham_grad_u_ext[0] -= MOVING_DOMAIN*dmom_u_acc_u_ext*xt_ext;
4542 dmom_u_ham_grad_u_ext[1] -= MOVING_DOMAIN*dmom_u_acc_u_ext*yt_ext;
4543 dmom_u_ham_grad_u_ext[2] -= MOVING_DOMAIN*dmom_u_acc_u_ext*zt_ext;
4547 mom_u_adv_ext[0] -= MOVING_DOMAIN*mom_u_acc_ext*xt_ext;
4548 mom_u_adv_ext[1] -= MOVING_DOMAIN*mom_u_acc_ext*yt_ext;
4549 mom_u_adv_ext[2] -= MOVING_DOMAIN*mom_u_acc_ext*zt_ext;
4550 dmom_u_adv_u_ext[0] -= MOVING_DOMAIN*dmom_u_acc_u_ext*xt_ext;
4551 dmom_u_adv_u_ext[1] -= MOVING_DOMAIN*dmom_u_acc_u_ext*yt_ext;
4552 dmom_u_adv_u_ext[2] -= MOVING_DOMAIN*dmom_u_acc_u_ext*zt_ext;
4556 if (NONCONSERVATIVE_FORM > 0.0)
4558 mom_v_ham_ext -= MOVING_DOMAIN*dmom_v_acc_v_ext*(grad_v_ext[0]*xt_ext + grad_v_ext[1]*yt_ext + grad_v_ext[2]*zt_ext);
4559 dmom_v_ham_grad_v_ext[0] -= MOVING_DOMAIN*dmom_v_acc_v_ext*xt_ext;
4560 dmom_v_ham_grad_v_ext[1] -= MOVING_DOMAIN*dmom_v_acc_v_ext*yt_ext;
4561 dmom_v_ham_grad_v_ext[2] -= MOVING_DOMAIN*dmom_v_acc_v_ext*zt_ext;
4565 mom_v_adv_ext[0] -= MOVING_DOMAIN*mom_v_acc_ext*xt_ext;
4566 mom_v_adv_ext[1] -= MOVING_DOMAIN*mom_v_acc_ext*yt_ext;
4567 mom_v_adv_ext[2] -= MOVING_DOMAIN*mom_v_acc_ext*zt_ext;
4568 dmom_v_adv_v_ext[0] -= MOVING_DOMAIN*dmom_v_acc_v_ext*xt_ext;
4569 dmom_v_adv_v_ext[1] -= MOVING_DOMAIN*dmom_v_acc_v_ext*yt_ext;
4570 dmom_v_adv_v_ext[2] -= MOVING_DOMAIN*dmom_v_acc_v_ext*zt_ext;
4574 if (NONCONSERVATIVE_FORM > 0.0)
4576 mom_w_ham_ext -= MOVING_DOMAIN*dmom_w_acc_w_ext*(grad_w_ext[0]*xt_ext + grad_w_ext[1]*yt_ext + grad_w_ext[2]*zt_ext);
4577 dmom_w_ham_grad_w_ext[0] -= MOVING_DOMAIN*dmom_w_acc_w_ext*xt_ext;
4578 dmom_w_ham_grad_w_ext[1] -= MOVING_DOMAIN*dmom_w_acc_w_ext*yt_ext;
4579 dmom_w_ham_grad_w_ext[2] -= MOVING_DOMAIN*dmom_w_acc_w_ext*zt_ext;
4583 mom_w_adv_ext[0] -= MOVING_DOMAIN*mom_w_acc_ext*xt_ext;
4584 mom_w_adv_ext[1] -= MOVING_DOMAIN*mom_w_acc_ext*yt_ext;
4585 mom_w_adv_ext[2] -= MOVING_DOMAIN*mom_w_acc_ext*zt_ext;
4586 dmom_w_adv_w_ext[0] -= MOVING_DOMAIN*dmom_w_acc_w_ext*xt_ext;
4587 dmom_w_adv_w_ext[1] -= MOVING_DOMAIN*dmom_w_acc_w_ext*yt_ext;
4588 dmom_w_adv_w_ext[2] -= MOVING_DOMAIN*dmom_w_acc_w_ext*zt_ext;
4592 if (NONCONSERVATIVE_FORM < 1.0)
4594 bc_mom_u_adv_ext[0] -= MOVING_DOMAIN*bc_mom_u_acc_ext*xt_ext;
4595 bc_mom_u_adv_ext[1] -= MOVING_DOMAIN*bc_mom_u_acc_ext*yt_ext;
4596 bc_mom_u_adv_ext[2] -= MOVING_DOMAIN*bc_mom_u_acc_ext*zt_ext;
4598 bc_mom_v_adv_ext[0] -= MOVING_DOMAIN*bc_mom_v_acc_ext*xt_ext;
4599 bc_mom_v_adv_ext[1] -= MOVING_DOMAIN*bc_mom_v_acc_ext*yt_ext;
4600 bc_mom_v_adv_ext[2] -= MOVING_DOMAIN*bc_mom_v_acc_ext*zt_ext;
4602 bc_mom_w_adv_ext[0] -= MOVING_DOMAIN*bc_mom_w_acc_ext*xt_ext;
4603 bc_mom_w_adv_ext[1] -= MOVING_DOMAIN*bc_mom_w_acc_ext*yt_ext;
4604 bc_mom_w_adv_ext[2] -= MOVING_DOMAIN*bc_mom_w_acc_ext*zt_ext;
4609 ck.calculateGScale(G,normal,h_penalty);
4610 penalty = useMetrics*C_b/h_penalty + (1.0-useMetrics)*ebqe_penalty_ext.data()[ebNE_kb];
4612 isDOFBoundary_p.data()[ebNE_kb],
4613 isDOFBoundary_u.data()[ebNE_kb],
4614 isDOFBoundary_v.data()[ebNE_kb],
4615 isDOFBoundary_w.data()[ebNE_kb],
4616 isAdvectiveFluxBoundary_p.data()[ebNE_kb],
4617 isAdvectiveFluxBoundary_u.data()[ebNE_kb],
4618 isAdvectiveFluxBoundary_v.data()[ebNE_kb],
4619 isAdvectiveFluxBoundary_w.data()[ebNE_kb],
4620 dmom_u_ham_grad_p_ext[0],
4621 bc_dmom_u_ham_grad_p_ext[0],
4631 ebqe_bc_flux_mass_ext.data()[ebNE_kb]+MOVING_DOMAIN*(xt_ext*normal[0]+yt_ext*normal[1]+zt_ext*normal[2]),
4632 ebqe_bc_flux_mom_u_adv_ext.data()[ebNE_kb],
4633 ebqe_bc_flux_mom_v_adv_ext.data()[ebNE_kb],
4634 ebqe_bc_flux_mom_w_adv_ext.data()[ebNE_kb],
4647 dmom_u_ham_grad_u_ext,
4663 &ebqe_velocity.data()[ebNE_kb_nSpace]);
4664 for (
int I=0;I<nSpace;I++)
4665 ebqe_velocity.data()[ebNE_kb_nSpace+I]/=porosity_ext;
4667 ebqe_phi_ext.data()[ebNE_kb],
4668 sdInfo_u_u_rowptr.data(),
4669 sdInfo_u_u_colind.data(),
4670 isDOFBoundary_u.data()[ebNE_kb],
4671 isDiffusiveFluxBoundary_u.data()[ebNE_kb],
4673 bc_mom_uu_diff_ten_ext,
4675 ebqe_bc_flux_u_diff_ext.data()[ebNE_kb],
4676 mom_uu_diff_ten_ext,
4680 flux_mom_uu_diff_ext);
4682 ebqe_phi_ext.data()[ebNE_kb],
4683 sdInfo_u_v_rowptr.data(),
4684 sdInfo_u_v_colind.data(),
4685 isDOFBoundary_v.data()[ebNE_kb],
4686 isDiffusiveFluxBoundary_v.data()[ebNE_kb],
4688 bc_mom_uv_diff_ten_ext,
4691 mom_uv_diff_ten_ext,
4695 flux_mom_uv_diff_ext);
4697 ebqe_phi_ext.data()[ebNE_kb],
4698 sdInfo_u_w_rowptr.data(),
4699 sdInfo_u_w_colind.data(),
4700 isDOFBoundary_w.data()[ebNE_kb],
4701 isDiffusiveFluxBoundary_w.data()[ebNE_kb],
4703 bc_mom_uw_diff_ten_ext,
4706 mom_uw_diff_ten_ext,
4710 flux_mom_uw_diff_ext);
4712 ebqe_phi_ext.data()[ebNE_kb],
4713 sdInfo_v_u_rowptr.data(),
4714 sdInfo_v_u_colind.data(),
4715 isDOFBoundary_u.data()[ebNE_kb],
4716 isDiffusiveFluxBoundary_u.data()[ebNE_kb],
4718 bc_mom_vu_diff_ten_ext,
4721 mom_vu_diff_ten_ext,
4725 flux_mom_vu_diff_ext);
4727 ebqe_phi_ext.data()[ebNE_kb],
4728 sdInfo_v_v_rowptr.data(),
4729 sdInfo_v_v_colind.data(),
4730 isDOFBoundary_v.data()[ebNE_kb],
4731 isDiffusiveFluxBoundary_v.data()[ebNE_kb],
4733 bc_mom_vv_diff_ten_ext,
4735 ebqe_bc_flux_v_diff_ext.data()[ebNE_kb],
4736 mom_vv_diff_ten_ext,
4740 flux_mom_vv_diff_ext);
4742 ebqe_phi_ext.data()[ebNE_kb],
4743 sdInfo_v_w_rowptr.data(),
4744 sdInfo_v_w_colind.data(),
4745 isDOFBoundary_w.data()[ebNE_kb],
4746 isDiffusiveFluxBoundary_w.data()[ebNE_kb],
4748 bc_mom_vw_diff_ten_ext,
4751 mom_vw_diff_ten_ext,
4755 flux_mom_vw_diff_ext);
4757 ebqe_phi_ext.data()[ebNE_kb],
4758 sdInfo_w_u_rowptr.data(),
4759 sdInfo_w_u_colind.data(),
4760 isDOFBoundary_u.data()[ebNE_kb],
4761 isDiffusiveFluxBoundary_u.data()[ebNE_kb],
4763 bc_mom_wu_diff_ten_ext,
4766 mom_wu_diff_ten_ext,
4770 flux_mom_wu_diff_ext);
4772 ebqe_phi_ext.data()[ebNE_kb],
4773 sdInfo_w_v_rowptr.data(),
4774 sdInfo_w_v_colind.data(),
4775 isDOFBoundary_v.data()[ebNE_kb],
4776 isDiffusiveFluxBoundary_v.data()[ebNE_kb],
4778 bc_mom_wv_diff_ten_ext,
4781 mom_wv_diff_ten_ext,
4785 flux_mom_wv_diff_ext);
4787 ebqe_phi_ext.data()[ebNE_kb],
4788 sdInfo_w_w_rowptr.data(),
4789 sdInfo_w_w_colind.data(),
4790 isDOFBoundary_w.data()[ebNE_kb],
4791 isDiffusiveFluxBoundary_w.data()[ebNE_kb],
4793 bc_mom_ww_diff_ten_ext,
4795 ebqe_bc_flux_w_diff_ext.data()[ebNE_kb],
4796 mom_ww_diff_ten_ext,
4800 flux_mom_ww_diff_ext);
4801 flux.data()[ebN*nQuadraturePoints_elementBoundary+kb] = flux_mass_ext;
4809 if (ebN < nElementBoundaries_owned)
4811 force_v_x = (flux_mom_u_adv_ext + flux_mom_uu_diff_ext + flux_mom_uv_diff_ext + flux_mom_uw_diff_ext)/dmom_u_ham_grad_p_ext[0];
4812 force_v_y = (flux_mom_v_adv_ext + flux_mom_vu_diff_ext + flux_mom_vv_diff_ext + flux_mom_vw_diff_ext)/dmom_u_ham_grad_p_ext[0];
4813 force_v_z = (flux_mom_w_adv_ext + flux_mom_wu_diff_ext + flux_mom_wv_diff_ext + flux_mom_ww_diff_ext)/dmom_u_ham_grad_p_ext[0];
4815 force_p_x = p_ext*normal[0];
4816 force_p_y = p_ext*normal[1];
4817 force_p_z = p_ext*normal[2];
4819 force_x = force_p_x + force_v_x;
4820 force_y = force_p_y + force_v_y;
4821 force_z = force_p_z + force_v_z;
4823 r_x = x_ext - barycenters.data()[3*boundaryFlags.data()[ebN]+0];
4824 r_y = y_ext - barycenters.data()[3*boundaryFlags.data()[ebN]+1];
4825 r_z = z_ext - barycenters.data()[3*boundaryFlags.data()[ebN]+2];
4827 wettedAreas.data()[boundaryFlags.data()[ebN]] += dS*(1.0-ebqe_vf_ext.data()[ebNE_kb]);
4829 netForces_p.data()[3*boundaryFlags.data()[ebN]+0] += force_p_x*dS;
4830 netForces_p.data()[3*boundaryFlags.data()[ebN]+1] += force_p_y*dS;
4831 netForces_p.data()[3*boundaryFlags.data()[ebN]+2] += force_p_z*dS;
4833 netForces_v.data()[3*boundaryFlags.data()[ebN]+0] += force_v_x*dS;
4834 netForces_v.data()[3*boundaryFlags.data()[ebN]+1] += force_v_y*dS;
4835 netForces_v.data()[3*boundaryFlags.data()[ebN]+2] += force_v_z*dS;
4837 netMoments.data()[3*boundaryFlags.data()[ebN]+0] += (r_y*force_z - r_z*force_y)*dS;
4838 netMoments.data()[3*boundaryFlags.data()[ebN]+1] += (r_z*force_x - r_x*force_z)*dS;
4839 netMoments.data()[3*boundaryFlags.data()[ebN]+2] += (r_x*force_y - r_y*force_x)*dS;
4844 const double H_s =
gf_s.
H(particle_eps, ebqe_phi_s.data()[ebNE_kb]);
4845 if (isActiveElement[eN])
4847 total_flux += flux_mass_ext*dS;
4848 for (
int i=0;i<nDOF_test_element;i++)
4850 elementResidual_mesh[i] -= H_s*
ck.ExteriorElementBoundaryFlux(MOVING_DOMAIN*(xt_ext*normal[0]+yt_ext*normal[1]+zt_ext*normal[2]),p_test_dS[i]);
4851 elementResidual_p[i] += H_s*
ck.ExteriorElementBoundaryFlux(flux_mass_ext,p_test_dS[i]);
4852 elementResidual_p[i] -= H_s*
DM*
ck.ExteriorElementBoundaryFlux(MOVING_DOMAIN*(xt_ext*normal[0]+yt_ext*normal[1]+zt_ext*normal[2]),p_test_dS[i]);
4853 globalConservationError += H_s*
ck.ExteriorElementBoundaryFlux(flux_mass_ext,p_test_dS[i]);
4855 for (
int i=0;i<nDOF_v_test_element;i++)
4857 elementResidual_u[i] += H_s*(
ck.ExteriorElementBoundaryFlux(flux_mom_u_adv_ext,vel_test_dS[i])+
4858 ck.ExteriorElementBoundaryFlux(flux_mom_uu_diff_ext,vel_test_dS[i])+
4859 ck.ExteriorElementBoundaryFlux(flux_mom_uv_diff_ext,vel_test_dS[i])+
4860 ck.ExteriorElementBoundaryFlux(flux_mom_uw_diff_ext,vel_test_dS[i])+
4861 ck.ExteriorElementBoundaryDiffusionAdjoint(isDOFBoundary_u.data()[ebNE_kb],
4862 isDiffusiveFluxBoundary_u.data()[ebNE_kb],
4867 sdInfo_u_u_rowptr.data(),
4868 sdInfo_u_u_colind.data(),
4869 mom_uu_diff_ten_ext,
4870 &vel_grad_test_dS[i*nSpace])+
4871 ck.ExteriorElementBoundaryDiffusionAdjoint(isDOFBoundary_v.data()[ebNE_kb],
4872 isDiffusiveFluxBoundary_u.data()[ebNE_kb],
4877 sdInfo_u_v_rowptr.data(),
4878 sdInfo_u_v_colind.data(),
4879 mom_uv_diff_ten_ext,
4880 &vel_grad_test_dS[i*nSpace])+
4881 ck.ExteriorElementBoundaryDiffusionAdjoint(isDOFBoundary_w.data()[ebNE_kb],
4882 isDiffusiveFluxBoundary_u.data()[ebNE_kb],
4887 sdInfo_u_w_rowptr.data(),
4888 sdInfo_u_w_colind.data(),
4889 mom_uw_diff_ten_ext,
4890 &vel_grad_test_dS[i*nSpace]));
4891 elementResidual_v[i] += H_s*(
ck.ExteriorElementBoundaryFlux(flux_mom_v_adv_ext,vel_test_dS[i]) +
4892 ck.ExteriorElementBoundaryFlux(flux_mom_vu_diff_ext,vel_test_dS[i])+
4893 ck.ExteriorElementBoundaryFlux(flux_mom_vv_diff_ext,vel_test_dS[i])+
4894 ck.ExteriorElementBoundaryFlux(flux_mom_vw_diff_ext,vel_test_dS[i])+
4895 ck.ExteriorElementBoundaryDiffusionAdjoint(isDOFBoundary_u.data()[ebNE_kb],
4896 isDiffusiveFluxBoundary_v.data()[ebNE_kb],
4901 sdInfo_v_u_rowptr.data(),
4902 sdInfo_v_u_colind.data(),
4903 mom_vu_diff_ten_ext,
4904 &vel_grad_test_dS[i*nSpace])+
4905 ck.ExteriorElementBoundaryDiffusionAdjoint(isDOFBoundary_v.data()[ebNE_kb],
4906 isDiffusiveFluxBoundary_v.data()[ebNE_kb],
4911 sdInfo_v_v_rowptr.data(),
4912 sdInfo_v_v_colind.data(),
4913 mom_vv_diff_ten_ext,
4914 &vel_grad_test_dS[i*nSpace])+
4915 ck.ExteriorElementBoundaryDiffusionAdjoint(isDOFBoundary_w.data()[ebNE_kb],
4916 isDiffusiveFluxBoundary_v.data()[ebNE_kb],
4921 sdInfo_v_w_rowptr.data(),
4922 sdInfo_v_w_colind.data(),
4923 mom_vw_diff_ten_ext,
4924 &vel_grad_test_dS[i*nSpace]));
4926 elementResidual_w[i] += H_s*(
ck.ExteriorElementBoundaryFlux(flux_mom_w_adv_ext,vel_test_dS[i]) +
4927 ck.ExteriorElementBoundaryFlux(flux_mom_wu_diff_ext,vel_test_dS[i])+
4928 ck.ExteriorElementBoundaryFlux(flux_mom_wv_diff_ext,vel_test_dS[i])+
4929 ck.ExteriorElementBoundaryFlux(flux_mom_ww_diff_ext,vel_test_dS[i])+
4930 ck.ExteriorElementBoundaryDiffusionAdjoint(isDOFBoundary_u.data()[ebNE_kb],
4931 isDiffusiveFluxBoundary_w.data()[ebNE_kb],
4936 sdInfo_w_u_rowptr.data(),
4937 sdInfo_w_u_colind.data(),
4938 mom_wu_diff_ten_ext,
4939 &vel_grad_test_dS[i*nSpace])+
4940 ck.ExteriorElementBoundaryDiffusionAdjoint(isDOFBoundary_v.data()[ebNE_kb],
4941 isDiffusiveFluxBoundary_w.data()[ebNE_kb],
4946 sdInfo_w_v_rowptr.data(),
4947 sdInfo_w_v_colind.data(),
4948 mom_wv_diff_ten_ext,
4949 &vel_grad_test_dS[i*nSpace])+
4950 ck.ExteriorElementBoundaryDiffusionAdjoint(isDOFBoundary_w.data()[ebNE_kb],
4951 isDiffusiveFluxBoundary_w.data()[ebNE_kb],
4956 sdInfo_w_w_rowptr.data(),
4957 sdInfo_w_w_colind.data(),
4958 mom_ww_diff_ten_ext,
4959 &vel_grad_test_dS[i*nSpace]));
4966 for (
int i=0;i<nDOF_test_element;i++)
4968 int eN_i = eN*nDOF_test_element+i;
4970 elementResidual_p_save.data()[eN_i] += elementResidual_p[i];
4971 mesh_volume_conservation_weak += elementResidual_mesh[i];
4972 globalResidual.data()[offset_p+stride_p*rp_l2g.data()[eN_i]]+=elementResidual_p[i];
4974 for (
int i=0;i<nDOF_v_test_element;i++)
4976 int eN_i = eN*nDOF_v_test_element+i;
4977 globalResidual.data()[offset_u+stride_u*rvel_l2g.data()[eN_i]]+=elementResidual_u[i];
4978 globalResidual.data()[offset_v+stride_v*rvel_l2g.data()[eN_i]]+=elementResidual_v[i];
4979 globalResidual.data()[offset_w+stride_w*rvel_l2g.data()[eN_i]]+=elementResidual_w[i];
4982 if (normalize_pressure)
4984 double send[4]={pa_dv,p_dv,total_volume, total_surface_area}, recv[4]={0.,0.,0.,0.};
4985 MPI_Allreduce(send, recv,4,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD);
4988 total_volume = recv[2];
4989 total_surface_area = recv[3];
5002 int nDOF_pressure=0;
5003 for(
int eN=0;eN<nElements_global;eN++)
5005 for (
int i=0;i<nDOF_test_element;i++)
5007 int eN_i = eN*nDOF_test_element+i;
5008 if (p_l2g.data()[eN_i] > nDOF_pressure)
5009 nDOF_pressure=p_l2g.data()[eN_i];
5013 assert(p_dof.shape(0) == nDOF_pressure);
5015 for (
int I=0;I<nDOF_pressure;I++)
5016 p_dof.data()[I] += (pa_dv - p_dv)/total_volume;
5017 double p_dv_new=0.0, pa_dv_new=0.0;
5021 for (
int eN=0 ; eN < nElements_owned ; ++eN)
5023 double element_phi[nDOF_mesh_trial_element], element_phi_s[nDOF_mesh_trial_element];
5024 for (
int j=0;j<nDOF_mesh_trial_element;j++)
5026 int eN_j = eN*nDOF_mesh_trial_element+j;
5027 element_phi[j] = phi_nodes.data()[p_l2g.data()[eN_j]];
5028 element_phi_s[j] = phi_solid_nodes.data()[p_l2g.data()[eN_j]];
5030 double element_nodes[nDOF_mesh_trial_element*3];
5031 for (
int i=0;i<nDOF_mesh_trial_element;i++)
5033 int eN_i=eN*nDOF_mesh_trial_element+i;
5034 for(
int I=0;I<3;I++)
5035 element_nodes[i*3 + I] = mesh_dof[mesh_l2g[eN_i]*3 + I];
5037 int icase_s =
gf_s.
calculate(element_phi_s, element_nodes, x_ref.data(),
false);
5038 for (
int k=0 ; k < nQuadraturePoints_element ; ++k)
5040 int eN_k = eN*nQuadraturePoints_element + k;
5041 int eN_nDOF_trial_element = eN*nDOF_trial_element;
5043 double jac[nSpace*nSpace];
5044 double jacInv[nSpace*nSpace];
5045 double p=0.0,
pe=0.0;
5046 double jacDet, x, y,
z, dV, h_phi;
5048 double H_s =
gf_s.
H(0.,0.);
5049 ck.calculateMapping_element(eN,
5053 mesh_trial_ref.data(),
5054 mesh_grad_trial_ref.data(),
5059 dV = fabs(jacDet)*dV_ref.data()[k];
5060 ck.valFromDOF(p_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],&p_trial_ref.data()[k*nDOF_trial_element],p);
5061 if (isActiveElement[eN])
5063 p_dv_new += p*H_s*dV;
5064 pa_dv_new += q_u_0.data()[eN_k]*H_s*dV;
5065 pe = p-q_u_0.data()[eN_k];
5066 p_L1 += fabs(
pe)*H_s*dV;
5067 p_L2 +=
pe*
pe*H_s*dV;
5068 if (fabs(
pe) > p_LI)
5074 assert(errors.shape(0)*errors.shape(1) == 15);
5075 MPI_Allreduce(MPI_IN_PLACE, errors.data(),(errors.shape(0)-1)*errors.shape(1),MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD);
5076 MPI_Allreduce(MPI_IN_PLACE, errors.data()+(errors.shape(0)-1)*errors.shape(1),1*errors.shape(1),MPI_DOUBLE,MPI_MAX,MPI_COMM_WORLD);
5077 assert(p_L2 >= 0.0);
5078 assert(u_L2 >= 0.0);
5079 assert(v_L2 >= 0.0);
5080 assert(w_L2 >= 0.0);
5081 assert(velocity_L2 >= 0.0);
5086 velocity_L2 = sqrt(velocity_L2);
5091 double NONCONSERVATIVE_FORM = args.
scalar<
double>(
"NONCONSERVATIVE_FORM");
5092 double MOMENTUM_SGE = args.
scalar<
double>(
"MOMENTUM_SGE");
5093 double PRESSURE_SGE = args.
scalar<
double>(
"PRESSURE_SGE");
5094 double VELOCITY_SGE = args.
scalar<
double>(
"VELOCITY_SGE");
5095 double PRESSURE_PROJECTION_STABILIZATION = args.
scalar<
double>(
"PRESSURE_PROJECTION_STABILIZATION");
5096 xt::pyarray<double>& mesh_trial_ref = args.
array<
double>(
"mesh_trial_ref");
5097 xt::pyarray<double>& mesh_grad_trial_ref = args.
array<
double>(
"mesh_grad_trial_ref");
5098 xt::pyarray<double>& mesh_dof = args.
array<
double>(
"mesh_dof");
5099 xt::pyarray<double>& mesh_velocity_dof = args.
array<
double>(
"mesh_velocity_dof");
5100 double MOVING_DOMAIN = args.
scalar<
double>(
"MOVING_DOMAIN");
5101 xt::pyarray<int>& mesh_l2g = args.
array<
int>(
"mesh_l2g");
5102 xt::pyarray<double>& x_ref = args.
array<
double>(
"x_ref");
5103 xt::pyarray<double>& dV_ref = args.
array<
double>(
"dV_ref");
5104 xt::pyarray<double>& p_trial_ref = args.
array<
double>(
"p_trial_ref");
5105 xt::pyarray<double>& p_grad_trial_ref = args.
array<
double>(
"p_grad_trial_ref");
5106 xt::pyarray<double>& p_test_ref = args.
array<
double>(
"p_test_ref");
5107 xt::pyarray<double>& p_grad_test_ref = args.
array<
double>(
"p_grad_test_ref");
5108 xt::pyarray<double>& vel_trial_ref = args.
array<
double>(
"vel_trial_ref");
5109 xt::pyarray<double>& vel_grad_trial_ref = args.
array<
double>(
"vel_grad_trial_ref");
5110 xt::pyarray<double>& vel_test_ref = args.
array<
double>(
"vel_test_ref");
5111 xt::pyarray<double>& vel_grad_test_ref = args.
array<
double>(
"vel_grad_test_ref");
5112 xt::pyarray<double>& mesh_trial_trace_ref = args.
array<
double>(
"mesh_trial_trace_ref");
5113 xt::pyarray<double>& mesh_grad_trial_trace_ref = args.
array<
double>(
"mesh_grad_trial_trace_ref");
5114 xt::pyarray<double>& xb_ref = args.
array<
double>(
"xb_ref");
5115 xt::pyarray<double>& dS_ref = args.
array<
double>(
"dS_ref");
5116 xt::pyarray<double>& p_trial_trace_ref = args.
array<
double>(
"p_trial_trace_ref");
5117 xt::pyarray<double>& p_grad_trial_trace_ref = args.
array<
double>(
"p_grad_trial_trace_ref");
5118 xt::pyarray<double>& p_test_trace_ref = args.
array<
double>(
"p_test_trace_ref");
5119 xt::pyarray<double>& p_grad_test_trace_ref = args.
array<
double>(
"p_grad_test_trace_ref");
5120 xt::pyarray<double>& vel_trial_trace_ref = args.
array<
double>(
"vel_trial_trace_ref");
5121 xt::pyarray<double>& vel_grad_trial_trace_ref = args.
array<
double>(
"vel_grad_trial_trace_ref");
5122 xt::pyarray<double>& vel_test_trace_ref = args.
array<
double>(
"vel_test_trace_ref");
5123 xt::pyarray<double>& vel_grad_test_trace_ref = args.
array<
double>(
"vel_grad_test_trace_ref");
5124 xt::pyarray<double>& normal_ref = args.
array<
double>(
"normal_ref");
5125 xt::pyarray<double>& boundaryJac_ref = args.
array<
double>(
"boundaryJac_ref");
5126 double eb_adjoint_sigma = args.
scalar<
double>(
"eb_adjoint_sigma");
5127 xt::pyarray<double>& elementDiameter = args.
array<
double>(
"elementDiameter");
5128 xt::pyarray<double>& elementBoundaryDiameter = args.
array<
double>(
"elementBoundaryDiameter");
5129 xt::pyarray<double>& nodeDiametersArray = args.
array<
double>(
"nodeDiametersArray");
5130 double hFactor = args.
scalar<
double>(
"hFactor");
5131 int nElements_global = args.
scalar<
int>(
"nElements_global");
5132 double useRBLES = args.
scalar<
double>(
"useRBLES");
5133 double useMetrics = args.
scalar<
double>(
"useMetrics");
5134 double alphaBDF = args.
scalar<
double>(
"alphaBDF");
5135 double epsFact_rho = args.
scalar<
double>(
"epsFact_rho");
5136 double epsFact_mu = args.
scalar<
double>(
"epsFact_mu");
5137 double sigma = args.
scalar<
double>(
"sigma");
5142 double smagorinskyConstant = args.
scalar<
double>(
"smagorinskyConstant");
5143 int turbulenceClosureModel = args.
scalar<
int>(
"turbulenceClosureModel");
5144 double Ct_sge = args.
scalar<
double>(
"Ct_sge");
5145 double Cd_sge = args.
scalar<
double>(
"Cd_sge");
5146 double C_dg = args.
scalar<
double>(
"C_dg");
5147 double C_b = args.
scalar<
double>(
"C_b");
5148 const xt::pyarray<double>& eps_solid = args.
array<
double>(
"eps_solid");
5149 const xt::pyarray<double>& phi_solid = args.
array<
double>(
"phi_solid");
5150 const xt::pyarray<double>& eps_porous = args.
array<
double>(
"eps_porous");
5151 const xt::pyarray<double>& phi_porous = args.
array<
double>(
"phi_porous");
5152 const xt::pyarray<double>& q_velocity_porous = args.
array<
double>(
"q_velocity_porous");
5153 const xt::pyarray<double>& q_porosity = args.
array<
double>(
"q_porosity");
5154 const xt::pyarray<double>& q_dragAlpha = args.
array<
double>(
"q_dragAlpha");
5155 const xt::pyarray<double>& q_dragBeta = args.
array<
double>(
"q_dragBeta");
5156 const xt::pyarray<double>& q_mass_source = args.
array<
double>(
"q_mass_source");
5157 const xt::pyarray<double>& q_turb_var_0 = args.
array<
double>(
"q_turb_var_0");
5158 const xt::pyarray<double>& q_turb_var_1 = args.
array<
double>(
"q_turb_var_1");
5159 const xt::pyarray<double>& q_turb_var_grad_0 = args.
array<
double>(
"q_turb_var_grad_0");
5160 const double LAG_LES = args.
scalar<
double>(
"LAG_LES");
5161 xt::pyarray<double> & q_eddy_viscosity_last = args.
array<
double>(
"q_eddy_viscosity_last");
5162 xt::pyarray<double> & ebqe_eddy_viscosity_last = args.
array<
double>(
"ebqe_eddy_viscosity_last");
5163 xt::pyarray<int>& p_l2g = args.
array<
int>(
"p_l2g");
5164 xt::pyarray<int>& vel_l2g = args.
array<
int>(
"vel_l2g");
5165 xt::pyarray<double>& p_dof = args.
array<
double>(
"p_dof");
5166 xt::pyarray<double>& u_dof = args.
array<
double>(
"u_dof");
5167 xt::pyarray<double>& v_dof = args.
array<
double>(
"v_dof");
5168 xt::pyarray<double>& w_dof = args.
array<
double>(
"w_dof");
5169 xt::pyarray<double>& p_old_dof = args.
array<
double>(
"p_old_dof");
5170 xt::pyarray<double>& u_old_dof = args.
array<
double>(
"u_old_dof");
5171 xt::pyarray<double>& v_old_dof = args.
array<
double>(
"v_old_dof");
5172 xt::pyarray<double>& w_old_dof = args.
array<
double>(
"w_old_dof");
5173 xt::pyarray<double>& g = args.
array<
double>(
"g");
5174 const double useVF = args.
scalar<
double>(
"useVF");
5175 xt::pyarray<double>& vf = args.
array<
double>(
"vf");
5176 xt::pyarray<double>&
phi = args.
array<
double>(
"phi");
5177 xt::pyarray<double>& phi_nodes = args.
array<
double>(
"phi_nodes");
5178 xt::pyarray<double>& normal_phi = args.
array<
double>(
"normal_phi");
5179 xt::pyarray<double>& kappa_phi = args.
array<
double>(
"kappa_phi");
5180 xt::pyarray<double>& q_mom_u_acc_beta_bdf = args.
array<
double>(
"q_mom_u_acc_beta_bdf");
5181 xt::pyarray<double>& q_mom_v_acc_beta_bdf = args.
array<
double>(
"q_mom_v_acc_beta_bdf");
5182 xt::pyarray<double>& q_mom_w_acc_beta_bdf = args.
array<
double>(
"q_mom_w_acc_beta_bdf");
5183 xt::pyarray<double>& q_dV = args.
array<
double>(
"q_dV");
5184 xt::pyarray<double>& q_dV_last = args.
array<
double>(
"q_dV_last");
5185 xt::pyarray<double>& q_velocity_sge = args.
array<
double>(
"q_velocity_sge");
5186 xt::pyarray<double>& q_cfl = args.
array<
double>(
"q_cfl");
5187 xt::pyarray<double>& q_numDiff_u_last = args.
array<
double>(
"q_numDiff_u_last");
5188 xt::pyarray<double>& q_numDiff_v_last = args.
array<
double>(
"q_numDiff_v_last");
5189 xt::pyarray<double>& q_numDiff_w_last = args.
array<
double>(
"q_numDiff_w_last");
5190 xt::pyarray<int>& sdInfo_u_u_rowptr = args.
array<
int>(
"sdInfo_u_u_rowptr");
5191 xt::pyarray<int>& sdInfo_u_u_colind = args.
array<
int>(
"sdInfo_u_u_colind");
5192 xt::pyarray<int>& sdInfo_u_v_rowptr = args.
array<
int>(
"sdInfo_u_v_rowptr");
5193 xt::pyarray<int>& sdInfo_u_v_colind = args.
array<
int>(
"sdInfo_u_v_colind");
5194 xt::pyarray<int>& sdInfo_u_w_rowptr = args.
array<
int>(
"sdInfo_u_w_rowptr");
5195 xt::pyarray<int>& sdInfo_u_w_colind = args.
array<
int>(
"sdInfo_u_w_colind");
5196 xt::pyarray<int>& sdInfo_v_v_rowptr = args.
array<
int>(
"sdInfo_v_v_rowptr");
5197 xt::pyarray<int>& sdInfo_v_v_colind = args.
array<
int>(
"sdInfo_v_v_colind");
5198 xt::pyarray<int>& sdInfo_v_u_rowptr = args.
array<
int>(
"sdInfo_v_u_rowptr");
5199 xt::pyarray<int>& sdInfo_v_u_colind = args.
array<
int>(
"sdInfo_v_u_colind");
5200 xt::pyarray<int>& sdInfo_v_w_rowptr = args.
array<
int>(
"sdInfo_v_w_rowptr");
5201 xt::pyarray<int>& sdInfo_v_w_colind = args.
array<
int>(
"sdInfo_v_w_colind");
5202 xt::pyarray<int>& sdInfo_w_w_rowptr = args.
array<
int>(
"sdInfo_w_w_rowptr");
5203 xt::pyarray<int>& sdInfo_w_w_colind = args.
array<
int>(
"sdInfo_w_w_colind");
5204 xt::pyarray<int>& sdInfo_w_u_rowptr = args.
array<
int>(
"sdInfo_w_u_rowptr");
5205 xt::pyarray<int>& sdInfo_w_u_colind = args.
array<
int>(
"sdInfo_w_u_colind");
5206 xt::pyarray<int>& sdInfo_w_v_rowptr = args.
array<
int>(
"sdInfo_w_v_rowptr");
5207 xt::pyarray<int>& sdInfo_w_v_colind = args.
array<
int>(
"sdInfo_w_v_colind");
5208 xt::pyarray<int>& csrRowIndeces_p_p = args.
array<
int>(
"csrRowIndeces_p_p");
5209 xt::pyarray<int>& csrColumnOffsets_p_p = args.
array<
int>(
"csrColumnOffsets_p_p");
5210 xt::pyarray<int>& csrRowIndeces_p_u = args.
array<
int>(
"csrRowIndeces_p_u");
5211 xt::pyarray<int>& csrColumnOffsets_p_u = args.
array<
int>(
"csrColumnOffsets_p_u");
5212 xt::pyarray<int>& csrRowIndeces_p_v = args.
array<
int>(
"csrRowIndeces_p_v");
5213 xt::pyarray<int>& csrColumnOffsets_p_v = args.
array<
int>(
"csrColumnOffsets_p_v");
5214 xt::pyarray<int>& csrRowIndeces_p_w = args.
array<
int>(
"csrRowIndeces_p_w");
5215 xt::pyarray<int>& csrColumnOffsets_p_w = args.
array<
int>(
"csrColumnOffsets_p_w");
5216 xt::pyarray<int>& csrRowIndeces_u_p = args.
array<
int>(
"csrRowIndeces_u_p");
5217 xt::pyarray<int>& csrColumnOffsets_u_p = args.
array<
int>(
"csrColumnOffsets_u_p");
5218 xt::pyarray<int>& csrRowIndeces_u_u = args.
array<
int>(
"csrRowIndeces_u_u");
5219 xt::pyarray<int>& csrColumnOffsets_u_u = args.
array<
int>(
"csrColumnOffsets_u_u");
5220 xt::pyarray<int>& csrRowIndeces_u_v = args.
array<
int>(
"csrRowIndeces_u_v");
5221 xt::pyarray<int>& csrColumnOffsets_u_v = args.
array<
int>(
"csrColumnOffsets_u_v");
5222 xt::pyarray<int>& csrRowIndeces_u_w = args.
array<
int>(
"csrRowIndeces_u_w");
5223 xt::pyarray<int>& csrColumnOffsets_u_w = args.
array<
int>(
"csrColumnOffsets_u_w");
5224 xt::pyarray<int>& csrRowIndeces_v_p = args.
array<
int>(
"csrRowIndeces_v_p");
5225 xt::pyarray<int>& csrColumnOffsets_v_p = args.
array<
int>(
"csrColumnOffsets_v_p");
5226 xt::pyarray<int>& csrRowIndeces_v_u = args.
array<
int>(
"csrRowIndeces_v_u");
5227 xt::pyarray<int>& csrColumnOffsets_v_u = args.
array<
int>(
"csrColumnOffsets_v_u");
5228 xt::pyarray<int>& csrRowIndeces_v_v = args.
array<
int>(
"csrRowIndeces_v_v");
5229 xt::pyarray<int>& csrColumnOffsets_v_v = args.
array<
int>(
"csrColumnOffsets_v_v");
5230 xt::pyarray<int>& csrRowIndeces_v_w = args.
array<
int>(
"csrRowIndeces_v_w");
5231 xt::pyarray<int>& csrColumnOffsets_v_w = args.
array<
int>(
"csrColumnOffsets_v_w");
5232 xt::pyarray<int>& csrRowIndeces_w_p = args.
array<
int>(
"csrRowIndeces_w_p");
5233 xt::pyarray<int>& csrColumnOffsets_w_p = args.
array<
int>(
"csrColumnOffsets_w_p");
5234 xt::pyarray<int>& csrRowIndeces_w_u = args.
array<
int>(
"csrRowIndeces_w_u");
5235 xt::pyarray<int>& csrColumnOffsets_w_u = args.
array<
int>(
"csrColumnOffsets_w_u");
5236 xt::pyarray<int>& csrRowIndeces_w_v = args.
array<
int>(
"csrRowIndeces_w_v");
5237 xt::pyarray<int>& csrColumnOffsets_w_v = args.
array<
int>(
"csrColumnOffsets_w_v");
5238 xt::pyarray<int>& csrRowIndeces_w_w = args.
array<
int>(
"csrRowIndeces_w_w");
5239 xt::pyarray<int>& csrColumnOffsets_w_w = args.
array<
int>(
"csrColumnOffsets_w_w");
5240 xt::pyarray<double>& globalJacobian = args.
array<
double>(
"globalJacobian");
5241 int nExteriorElementBoundaries_global = args.
scalar<
int>(
"nExteriorElementBoundaries_global");
5242 xt::pyarray<int>& exteriorElementBoundariesArray = args.
array<
int>(
"exteriorElementBoundariesArray");
5243 xt::pyarray<int>& elementBoundaryElementsArray = args.
array<
int>(
"elementBoundaryElementsArray");
5244 xt::pyarray<int>& elementBoundaryLocalElementBoundariesArray = args.
array<
int>(
"elementBoundaryLocalElementBoundariesArray");
5245 xt::pyarray<double>& ebqe_vf_ext = args.
array<
double>(
"ebqe_vf_ext");
5246 xt::pyarray<double>& bc_ebqe_vf_ext = args.
array<
double>(
"bc_ebqe_vf_ext");
5247 xt::pyarray<double>& ebqe_phi_ext = args.
array<
double>(
"ebqe_phi_ext");
5248 xt::pyarray<double>& bc_ebqe_phi_ext = args.
array<
double>(
"bc_ebqe_phi_ext");
5249 xt::pyarray<double>& ebqe_normal_phi_ext = args.
array<
double>(
"ebqe_normal_phi_ext");
5250 xt::pyarray<double>& ebqe_kappa_phi_ext = args.
array<
double>(
"ebqe_kappa_phi_ext");
5251 const xt::pyarray<double>& ebqe_porosity_ext = args.
array<
double>(
"ebqe_porosity_ext");
5252 const xt::pyarray<double>& ebqe_turb_var_0 = args.
array<
double>(
"ebqe_turb_var_0");
5253 const xt::pyarray<double>& ebqe_turb_var_1 = args.
array<
double>(
"ebqe_turb_var_1");
5254 xt::pyarray<int>& isDOFBoundary_p = args.
array<
int>(
"isDOFBoundary_p");
5255 xt::pyarray<int>& isDOFBoundary_u = args.
array<
int>(
"isDOFBoundary_u");
5256 xt::pyarray<int>& isDOFBoundary_v = args.
array<
int>(
"isDOFBoundary_v");
5257 xt::pyarray<int>& isDOFBoundary_w = args.
array<
int>(
"isDOFBoundary_w");
5258 xt::pyarray<int>& isAdvectiveFluxBoundary_p = args.
array<
int>(
"isAdvectiveFluxBoundary_p");
5259 xt::pyarray<int>& isAdvectiveFluxBoundary_u = args.
array<
int>(
"isAdvectiveFluxBoundary_u");
5260 xt::pyarray<int>& isAdvectiveFluxBoundary_v = args.
array<
int>(
"isAdvectiveFluxBoundary_v");
5261 xt::pyarray<int>& isAdvectiveFluxBoundary_w = args.
array<
int>(
"isAdvectiveFluxBoundary_w");
5262 xt::pyarray<int>& isDiffusiveFluxBoundary_u = args.
array<
int>(
"isDiffusiveFluxBoundary_u");
5263 xt::pyarray<int>& isDiffusiveFluxBoundary_v = args.
array<
int>(
"isDiffusiveFluxBoundary_v");
5264 xt::pyarray<int>& isDiffusiveFluxBoundary_w = args.
array<
int>(
"isDiffusiveFluxBoundary_w");
5265 xt::pyarray<double>& ebqe_bc_p_ext = args.
array<
double>(
"ebqe_bc_p_ext");
5266 xt::pyarray<double>& ebqe_bc_flux_mass_ext = args.
array<
double>(
"ebqe_bc_flux_mass_ext");
5267 xt::pyarray<double>& ebqe_bc_flux_mom_u_adv_ext = args.
array<
double>(
"ebqe_bc_flux_mom_u_adv_ext");
5268 xt::pyarray<double>& ebqe_bc_flux_mom_v_adv_ext = args.
array<
double>(
"ebqe_bc_flux_mom_v_adv_ext");
5269 xt::pyarray<double>& ebqe_bc_flux_mom_w_adv_ext = args.
array<
double>(
"ebqe_bc_flux_mom_w_adv_ext");
5270 xt::pyarray<double>& ebqe_bc_u_ext = args.
array<
double>(
"ebqe_bc_u_ext");
5271 xt::pyarray<double>& ebqe_bc_flux_u_diff_ext = args.
array<
double>(
"ebqe_bc_flux_u_diff_ext");
5272 xt::pyarray<double>& ebqe_penalty_ext = args.
array<
double>(
"ebqe_penalty_ext");
5273 xt::pyarray<double>& ebqe_bc_v_ext = args.
array<
double>(
"ebqe_bc_v_ext");
5274 xt::pyarray<double>& ebqe_bc_flux_v_diff_ext = args.
array<
double>(
"ebqe_bc_flux_v_diff_ext");
5275 xt::pyarray<double>& ebqe_bc_w_ext = args.
array<
double>(
"ebqe_bc_w_ext");
5276 xt::pyarray<double>& ebqe_bc_flux_w_diff_ext = args.
array<
double>(
"ebqe_bc_flux_w_diff_ext");
5277 xt::pyarray<int>& csrColumnOffsets_eb_p_p = args.
array<
int>(
"csrColumnOffsets_eb_p_p");
5278 xt::pyarray<int>& csrColumnOffsets_eb_p_u = args.
array<
int>(
"csrColumnOffsets_eb_p_u");
5279 xt::pyarray<int>& csrColumnOffsets_eb_p_v = args.
array<
int>(
"csrColumnOffsets_eb_p_v");
5280 xt::pyarray<int>& csrColumnOffsets_eb_p_w = args.
array<
int>(
"csrColumnOffsets_eb_p_w");
5281 xt::pyarray<int>& csrColumnOffsets_eb_u_p = args.
array<
int>(
"csrColumnOffsets_eb_u_p");
5282 xt::pyarray<int>& csrColumnOffsets_eb_u_u = args.
array<
int>(
"csrColumnOffsets_eb_u_u");
5283 xt::pyarray<int>& csrColumnOffsets_eb_u_v = args.
array<
int>(
"csrColumnOffsets_eb_u_v");
5284 xt::pyarray<int>& csrColumnOffsets_eb_u_w = args.
array<
int>(
"csrColumnOffsets_eb_u_w");
5285 xt::pyarray<int>& csrColumnOffsets_eb_v_p = args.
array<
int>(
"csrColumnOffsets_eb_v_p");
5286 xt::pyarray<int>& csrColumnOffsets_eb_v_u = args.
array<
int>(
"csrColumnOffsets_eb_v_u");
5287 xt::pyarray<int>& csrColumnOffsets_eb_v_v = args.
array<
int>(
"csrColumnOffsets_eb_v_v");
5288 xt::pyarray<int>& csrColumnOffsets_eb_v_w = args.
array<
int>(
"csrColumnOffsets_eb_v_w");
5289 xt::pyarray<int>& csrColumnOffsets_eb_w_p = args.
array<
int>(
"csrColumnOffsets_eb_w_p");
5290 xt::pyarray<int>& csrColumnOffsets_eb_w_u = args.
array<
int>(
"csrColumnOffsets_eb_w_u");
5291 xt::pyarray<int>& csrColumnOffsets_eb_w_v = args.
array<
int>(
"csrColumnOffsets_eb_w_v");
5292 xt::pyarray<int>& csrColumnOffsets_eb_w_w = args.
array<
int>(
"csrColumnOffsets_eb_w_w");
5293 xt::pyarray<int>& elementFlags = args.
array<
int>(
"elementFlags");
5294 xt::pyarray<int>& boundaryFlags = args.
array<
int>(
"boundaryFlags");
5295 int use_ball_as_particle = args.
scalar<
int>(
"use_ball_as_particle");
5296 xt::pyarray<double>& ball_center = args.
array<
double>(
"ball_center");
5297 xt::pyarray<double>& ball_radius = args.
array<
double>(
"ball_radius");
5298 xt::pyarray<double>& ball_velocity = args.
array<
double>(
"ball_velocity");
5299 xt::pyarray<double>& ball_angular_velocity = args.
array<
double>(
"ball_angular_velocity");
5300 xt::pyarray<double>& ball_density = args.
array<
double>(
"ball_density");
5301 xt::pyarray<double>& particle_signed_distances = args.
array<
double>(
"particle_signed_distances");
5302 xt::pyarray<double>& particle_signed_distance_normals = args.
array<
double>(
"particle_signed_distance_normals");
5303 xt::pyarray<double>& particle_velocities = args.
array<
double>(
"particle_velocities");
5304 xt::pyarray<double>& particle_centroids = args.
array<
double>(
"particle_centroids");
5305 xt::pyarray<double>& ebqe_phi_s = args.
array<
double>(
"ebqe_phi_s");
5306 xt::pyarray<double>& ebq_global_grad_phi_s = args.
array<
double>(
"ebq_global_grad_phi_s");
5307 xt::pyarray<double>& ebq_particle_velocity_s = args.
array<
double>(
"ebq_particle_velocity_s");
5308 xt::pyarray<double>& phi_solid_nodes = args.
array<
double>(
"phi_solid_nodes");
5309 xt::pyarray<double>& distance_to_solids = args.
array<
double>(
"distance_to_solids");
5310 xt::pyarray<int>& isActiveElement = args.
array<
int>(
"isActiveElement");
5311 xt::pyarray<int>& isActiveElement_last = args.
array<
int>(
"isActiveElement_last");
5312 int nParticles = args.
scalar<
int>(
"nParticles");
5313 int nElements_owned = args.
scalar<
int>(
"nElements_owned");
5314 double particle_nitsche = args.
scalar<
double>(
"particle_nitsche");
5315 double particle_epsFact = args.
scalar<
double>(
"particle_epsFact");
5316 double particle_alpha = args.
scalar<
double>(
"particle_alpha");
5317 double particle_beta = args.
scalar<
double>(
"particle_beta");
5318 double particle_penalty_constant = args.
scalar<
double>(
"particle_penalty_constant");
5319 double ghost_penalty_constant = args.
scalar<
double>(
"ghost_penalty_constant");
5320 const bool useExact = args.
scalar<
int>(
"useExact");
5321 const int nQuadraturePoints_global(nElements_global*nQuadraturePoints_element);
5322 std::valarray<double> particle_surfaceArea_tmp(nParticles), particle_surfaceArea_projected_tmp(nParticles), projection_direction_tmp(3),
5323 particle_netForces_tmp(nParticles*3*3), particle_netMoments_tmp(nParticles*3), particle_volume_tmp(nParticles);
5330 for(
int eN=0;eN<nElements_global;eN++)
5332 int particle_index=0;
5333 double eps_rho,eps_mu;
5335 double elementJacobian_p_p[nDOF_test_element][nDOF_trial_element],
5336 elementJacobian_p_u[nDOF_test_element][nDOF_v_trial_element],
5337 elementJacobian_p_v[nDOF_test_element][nDOF_v_trial_element],
5338 elementJacobian_p_w[nDOF_test_element][nDOF_v_trial_element],
5339 elementJacobian_u_p[nDOF_v_test_element][nDOF_trial_element],
5340 elementJacobian_u_u[nDOF_v_test_element][nDOF_v_trial_element],
5341 elementJacobian_u_v[nDOF_v_test_element][nDOF_v_trial_element],
5342 elementJacobian_u_w[nDOF_v_test_element][nDOF_v_trial_element],
5343 elementJacobian_v_p[nDOF_v_test_element][nDOF_trial_element],
5344 elementJacobian_v_u[nDOF_v_test_element][nDOF_v_trial_element],
5345 elementJacobian_v_v[nDOF_v_test_element][nDOF_v_trial_element],
5346 elementJacobian_v_w[nDOF_v_test_element][nDOF_v_trial_element],
5347 elementJacobian_w_p[nDOF_v_test_element][nDOF_trial_element],
5348 elementJacobian_w_u[nDOF_v_test_element][nDOF_v_trial_element],
5349 elementJacobian_w_v[nDOF_v_test_element][nDOF_v_trial_element],
5350 elementJacobian_w_w[nDOF_v_test_element][nDOF_v_trial_element];
5351 for (
int i=0;i<nDOF_test_element;i++)
5352 for (
int j=0;j<nDOF_trial_element;j++)
5354 elementJacobian_p_p[i][j]=0.0;
5356 for (
int i=0;i<nDOF_test_element;i++)
5357 for (
int j=0;j<nDOF_v_trial_element;j++)
5359 elementJacobian_p_u[i][j]=0.0;
5360 elementJacobian_p_v[i][j]=0.0;
5361 elementJacobian_p_w[i][j]=0.0;
5362 elementJacobian_u_p[j][i]=0.0;
5363 elementJacobian_v_p[j][i]=0.0;
5364 elementJacobian_w_p[j][i]=0.0;
5366 for (
int i=0;i<nDOF_v_test_element;i++)
5367 for (
int j=0;j<nDOF_v_trial_element;j++)
5369 elementJacobian_u_u[i][j]=0.0;
5370 elementJacobian_u_v[i][j]=0.0;
5371 elementJacobian_u_w[i][j]=0.0;
5372 elementJacobian_v_u[i][j]=0.0;
5373 elementJacobian_v_v[i][j]=0.0;
5374 elementJacobian_v_w[i][j]=0.0;
5375 elementJacobian_w_u[i][j]=0.0;
5376 elementJacobian_w_v[i][j]=0.0;
5377 elementJacobian_w_w[i][j]=0.0;
5379 if(use_ball_as_particle==1 && nParticles > 0)
5381 double min_d = 1e10;
5383 for (
int I=0;I<nDOF_mesh_trial_element;I++)
5386 mesh_dof.data()[3*mesh_l2g.data()[eN*nDOF_mesh_trial_element+I]+0],
5387 mesh_dof.data()[3*mesh_l2g.data()[eN*nDOF_mesh_trial_element+I]+1],
5388 mesh_dof.data()[3*mesh_l2g.data()[eN*nDOF_mesh_trial_element+I]+2],
5389 phi_solid_nodes.data()[mesh_l2g.data()[eN*nDOF_mesh_trial_element+I]]);
5390 if (phi_solid_nodes.data()[mesh_l2g.data()[eN*nDOF_mesh_trial_element+I]] < min_d)
5392 min_d = phi_solid_nodes.data()[mesh_l2g.data()[eN*nDOF_mesh_trial_element+I]];
5393 particle_index = index;
5401 double element_phi[nDOF_mesh_trial_element], element_phi_s[nDOF_mesh_trial_element];
5402 for (
int j=0;j<nDOF_mesh_trial_element;j++)
5404 int eN_j = eN*nDOF_mesh_trial_element+j;
5405 element_phi[j] = phi_nodes.data()[p_l2g.data()[eN_j]];
5406 element_phi_s[j] = phi_solid_nodes.data()[p_l2g.data()[eN_j]];
5408 double element_nodes[nDOF_mesh_trial_element*3];
5409 for (
int i=0;i<nDOF_mesh_trial_element;i++)
5411 int eN_i=eN*nDOF_mesh_trial_element+i;
5412 for(
int I=0;I<3;I++)
5413 element_nodes[i*3 + I] = mesh_dof.data()[mesh_l2g.data()[eN_i]*3 + I];
5415 int icase_s =
gf_s.
calculate(element_phi_s, element_nodes, x_ref.data(),
false);
5417 int icase_p =
gf_p.
calculate(element_phi, element_nodes, x_ref.data(), -
rho_1*g.data()[1], -
rho_0*g.data()[1],
false,
true);
5420 int icase_p =
gf_p.
calculate(element_phi, element_nodes, x_ref.data(), 1.,1.,
false,
false);
5421 int icase =
gf.
calculate(element_phi, element_nodes, x_ref.data(), 1.,1.,
false,
false);
5423 for (
int fluid_phase=0;fluid_phase < 2 - abs(icase); fluid_phase++)
5425 for (
int k=0;k<nQuadraturePoints_element;k++)
5427 int eN_k = eN*nQuadraturePoints_element+k,
5428 eN_k_nSpace = eN_k*nSpace,
5430 eN_nDOF_trial_element = eN*nDOF_trial_element,
5431 eN_nDOF_v_trial_element = eN*nDOF_v_trial_element;
5434 double p=0.0,
u=0.0,
v=0.0,
w=0.0,
5436 p_old=0.0,u_old=0.0,v_old=0.0,w_old=0.0,
5464 mom_uu_diff_ten[nSpace]=
ZEROVEC,
5465 mom_vv_diff_ten[nSpace]=
ZEROVEC,
5466 mom_ww_diff_ten[nSpace]=
ZEROVEC,
5477 dmom_u_ham_grad_p[nSpace]=
ZEROVEC,
5478 dmom_u_ham_grad_u[nSpace]=
ZEROVEC,
5479 dmom_u_ham_grad_v[nSpace]=
ZEROVEC,
5480 dmom_u_ham_grad_w[nSpace]=
ZEROVEC,
5485 dmom_v_ham_grad_p[nSpace]=
ZEROVEC,
5486 dmom_v_ham_grad_u[nSpace]=
ZEROVEC,
5487 dmom_v_ham_grad_v[nSpace]=
ZEROVEC,
5488 dmom_v_ham_grad_w[nSpace]=
ZEROVEC,
5493 dmom_w_ham_grad_p[nSpace]=
ZEROVEC,
5494 dmom_w_ham_grad_u[nSpace]=
ZEROVEC,
5495 dmom_w_ham_grad_v[nSpace]=
ZEROVEC,
5496 dmom_w_ham_grad_w[nSpace]=
ZEROVEC,
5510 dpdeResidual_p_u[nDOF_v_trial_element],dpdeResidual_p_v[nDOF_v_trial_element],dpdeResidual_p_w[nDOF_v_trial_element],
5511 dpdeResidual_u_p[nDOF_trial_element],dpdeResidual_u_u[nDOF_v_trial_element],
5512 dpdeResidual_v_p[nDOF_trial_element],dpdeResidual_v_v[nDOF_v_trial_element],
5513 dpdeResidual_w_p[nDOF_trial_element],dpdeResidual_w_w[nDOF_v_trial_element],
5514 Lstar_u_p[nDOF_test_element],
5515 Lstar_v_p[nDOF_test_element],
5516 Lstar_w_p[nDOF_test_element],
5517 Lstar_u_u[nDOF_v_test_element],
5518 Lstar_v_v[nDOF_v_test_element],
5519 Lstar_w_w[nDOF_v_test_element],
5520 Lstar_p_u[nDOF_v_test_element],
5521 Lstar_p_v[nDOF_v_test_element],
5522 Lstar_p_w[nDOF_v_test_element],
5527 dsubgridError_p_u[nDOF_v_trial_element],
5528 dsubgridError_p_v[nDOF_v_trial_element],
5529 dsubgridError_p_w[nDOF_v_trial_element],
5530 dsubgridError_u_p[nDOF_trial_element],
5531 dsubgridError_u_u[nDOF_v_trial_element],
5532 dsubgridError_v_p[nDOF_trial_element],
5533 dsubgridError_v_v[nDOF_v_trial_element],
5534 dsubgridError_w_p[nDOF_trial_element],
5535 dsubgridError_w_w[nDOF_v_trial_element],
5536 tau_p=0.0,tau_p0=0.0,tau_p1=0.0,
5537 tau_v=0.0,tau_v0=0.0,tau_v1=0.0,
5540 jacInv[nSpace*nSpace],
5541 p_trial[nDOF_trial_element], vel_trial[nDOF_v_trial_element],
5542 p_grad_trial_ib[nDOF_trial_element*nSpace], vel_grad_trial_ib[nDOF_v_trial_element*nSpace],
5543 p_grad_trial[nDOF_trial_element*nSpace],vel_grad_trial[nDOF_v_trial_element*nSpace],
5545 p_test_dV[nDOF_test_element],vel_test_dV[nDOF_v_test_element],
5546 p_grad_test_dV[nDOF_test_element*nSpace],vel_grad_test_dV[nDOF_v_test_element*nSpace],
5551 dmom_u_source[nSpace]=
ZEROVEC,
5552 dmom_v_source[nSpace]=
ZEROVEC,
5553 dmom_w_source[nSpace]=
ZEROVEC,
5556 G[nSpace*nSpace],G_dd_G,tr_G,h_phi, dmom_adv_star[nSpace]=
ZEROVEC, dmom_adv_sge[nSpace]=
ZEROVEC, dmom_ham_grad_sge[nSpace]=
ZEROVEC,
5562 dmom_u_source_s[nSpace]=
ZEROVEC,
5563 dmom_v_source_s[nSpace]=
ZEROVEC,
5564 dmom_w_source_s[nSpace]=
ZEROVEC,
5568 dmom_u_adv_u_s[nSpace]=
ZEROVEC,
5569 dmom_v_adv_v_s[nSpace]=
ZEROVEC,
5570 dmom_w_adv_w_s[nSpace]=
ZEROVEC,
5572 dmom_u_ham_grad_u_s[nSpace]=
ZEROVEC,
5573 dmom_u_ham_grad_v_s[nSpace]=
ZEROVEC,
5574 dmom_u_ham_grad_w_s[nSpace]=
ZEROVEC,
5579 dmom_v_ham_grad_u_s[nSpace]=
ZEROVEC,
5580 dmom_v_ham_grad_v_s[nSpace]=
ZEROVEC,
5581 dmom_v_ham_grad_w_s[nSpace]=
ZEROVEC,
5586 dmom_w_ham_grad_u_s[nSpace]=
ZEROVEC,
5587 dmom_w_ham_grad_v_s[nSpace]=
ZEROVEC,
5588 dmom_w_ham_grad_w_s[nSpace]=
ZEROVEC,
5600 ck.calculateMapping_element(eN,
5604 mesh_trial_ref.data(),
5605 mesh_grad_trial_ref.data(),
5610 ck.calculateH_element(eN,
5612 nodeDiametersArray.data(),
5614 mesh_trial_ref.data(),
5616 ck.calculateMappingVelocity_element(eN,
5618 mesh_velocity_dof.data(),
5620 mesh_trial_ref.data(),
5625 dV = fabs(jacDet)*dV_ref.data()[k];
5626 ck.calculateG(jacInv,G,G_dd_G,tr_G);
5629 eps_rho = epsFact_rho*(useMetrics*h_phi+(1.0-useMetrics)*elementDiameter.data()[eN]);
5630 eps_mu = epsFact_mu *(useMetrics*h_phi+(1.0-useMetrics)*elementDiameter.data()[eN]);
5632 ck.gradTrialFromRef(&p_grad_trial_ref.data()[k*nDOF_trial_element*nSpace],jacInv,p_grad_trial);
5633 ck_v.gradTrialFromRef(&vel_grad_trial_ref.data()[k*nDOF_v_trial_element*nSpace],jacInv,vel_grad_trial);
5634 for (
int i=0; i < nDOF_trial_element; i++)
5636 p_trial[i] = p_trial_ref.data()[k*nDOF_trial_element + i];
5637 p_grad_trial_ib[i*nSpace + 0] = p_grad_trial[i*nSpace+0];
5638 p_grad_trial_ib[i*nSpace + 1] = p_grad_trial[i*nSpace+1];
5639 p_grad_trial_ib[i*nSpace + 2] = p_grad_trial[i*nSpace+2];
5641 for (
int i=0; i < nDOF_v_trial_element; i++)
5643 vel_trial[i] = vel_trial_ref.data()[k*nDOF_v_trial_element + i];
5644 vel_grad_trial_ib[i*nSpace + 0] = vel_grad_trial[i*nSpace+0];
5645 vel_grad_trial_ib[i*nSpace + 1] = vel_grad_trial[i*nSpace+1];
5646 vel_grad_trial_ib[i*nSpace + 2] = vel_grad_trial[i*nSpace+2];
5651 for (
int i=0; i < nDOF_trial_element; i++)
5653 if (fluid_phase == 0)
5655 if (not std::isnan(
gf_p.
VA(i)))
5658 p_grad_trial_ib[i*nSpace + 0] =
gf_p.
VA_x(i);
5659 p_grad_trial_ib[i*nSpace + 1] =
gf_p.
VA_y(i);
5660 p_grad_trial_ib[i*nSpace + 2] =
gf_p.
VA_z(i);
5665 if (not std::isnan(
gf_p.
VB(i)))
5668 p_grad_trial_ib[i*nSpace + 0] =
gf_p.
VB_x(i);
5669 p_grad_trial_ib[i*nSpace + 1] =
gf_p.
VB_y(i);
5670 p_grad_trial_ib[i*nSpace + 2] =
gf_p.
VB_z(i);
5674 if(nDOF_v_trial_element == nDOF_trial_element)
5676 for (
int vi=0; vi < nDOF_v_trial_element; vi++)
5678 if (fluid_phase == 0)
5680 if (not std::isnan(
gf.
VA(vi)))
5682 vel_trial[vi] =
gf.
VA(vi);
5683 vel_grad_trial_ib[vi*nSpace + 0] =
gf.
VA_x(vi);
5684 vel_grad_trial_ib[vi*nSpace + 1] =
gf.
VA_y(vi);
5685 vel_grad_trial_ib[vi*nSpace + 2] =
gf.
VA_z(vi);
5690 if (not std::isnan(
gf.
VB(vi)))
5692 vel_trial[vi] =
gf.
VB(vi);
5693 vel_grad_trial_ib[vi*nSpace + 0] =
gf.
VB_x(vi);
5694 vel_grad_trial_ib[vi*nSpace + 1] =
gf.
VB_y(vi);
5695 vel_grad_trial_ib[vi*nSpace + 2] =
gf.
VB_z(vi);
5703 for (
int vi=0; vi < nDOF_v_trial_element; vi++)
5706 if (fabs(p_trial_ref.data()[k*nDOF_trial_element + vi] - p_trial[vi]) > 1.0e-8)
5708 for (
int vj=0; vj < nDOF_trial_element; vj++)
5709 std::cout<<
"Trial "<<p_trial_ref.data()[k*nDOF_trial_element + vj]<<
'\t'<<
gf_p.
VA(vj)<<
'\t'<<
gf_p.
VB(vj)<<std::endl;
5712 if (fabs(p_grad_trial[vi*nSpace + 0] - p_grad_trial_ib[vi*nSpace+0]) > 1.0e-8)
5714 for (
int vj=0; vj < nDOF_trial_element; vj++)
5715 std::cout<<
"Grad Trial x"<<p_grad_trial[vj*nSpace + 0]<<
'\t'<<
gf_p.
VA_x(vj)<<
'\t'<<
gf_p.
VB_x(vj)<<std::endl;
5718 if (fabs(p_grad_trial[vi*nSpace + 1] - p_grad_trial_ib[vi*nSpace+1]) > 1.0e-8)
5720 for (
int vj=0; vj < nDOF_trial_element; vj++)
5721 std::cout<<
"Grad Trial y "<<p_grad_trial[vj*nSpace + 1]<<
'\t'<<
gf_p.
VA_y(vj)<<
'\t'<<
gf_p.
VB_y(vj)<<std::endl;
5724 if (fabs(p_grad_trial[vi*nSpace + 2] - p_grad_trial_ib[vi*nSpace+2]) > 1.0e-8)
5726 for (
int vj=0; vj < nDOF_trial_element; vj++)
5727 std::cout<<
"Grad Trial z "<<p_grad_trial[vj*nSpace + 2]<<
'\t'<<
gf_p.
VA_z(vj)<<
'\t'<<
gf_p.
VB_z(vj)<<std::endl;
5731 if (fabs(vel_trial_ref.data()[k*nDOF_v_trial_element + vi] - vel_trial[vi]) > 1.0e-8)
5733 for (
int vj=0; vj < nDOF_v_trial_element; vj++)
5734 std::cout<<
"Trial "<<vel_trial_ref.data()[k*nDOF_v_trial_element + vj]<<
'\t'<<
gf.
VA(vj)<<
'\t'<<
gf.
VB(vj)<<std::endl;
5737 if (fabs(vel_grad_trial[vi*nSpace + 0] - vel_grad_trial_ib[vi*nSpace+0]) > 1.0e-8)
5739 for (
int vj=0; vj < nDOF_v_trial_element; vj++)
5740 std::cout<<
"Grad Trial x"<<vel_grad_trial[vj*nSpace + 0]<<
'\t'<<
gf.
VA_x(vj)<<
'\t'<<
gf.
VB_x(vj)<<std::endl;
5743 if (fabs(vel_grad_trial[vi*nSpace + 1] - vel_grad_trial_ib[vi*nSpace+1]) > 1.0e-8)
5745 for (
int vj=0; vj < nDOF_v_trial_element; vj++)
5746 std::cout<<
"Grad Trial y "<<vel_grad_trial[vj*nSpace + 1]<<
'\t'<<
gf.
VA_y(vj)<<
'\t'<<
gf.
VB_y(vj)<<std::endl;
5749 if (fabs(vel_grad_trial[vi*nSpace + 2] - vel_grad_trial_ib[vi*nSpace+2]) > 1.0e-8)
5751 for (
int vj=0; vj < nDOF_v_trial_element; vj++)
5752 std::cout<<
"Grad Trial z "<<vel_grad_trial[vj*nSpace + 2]<<
'\t'<<
gf.
VA_z(vj)<<
'\t'<<
gf.
VB_z(vj)<<std::endl;
5762 ck.valFromDOF(p_dof.data(),&p_l2g[eN_nDOF_trial_element],p_trial,p);
5763 ck_v.valFromDOF(u_dof.data(),&vel_l2g[eN_nDOF_v_trial_element],vel_trial,
u);
5764 ck_v.valFromDOF(v_dof.data(),&vel_l2g[eN_nDOF_v_trial_element],vel_trial,
v);
5765 ck_v.valFromDOF(w_dof.data(),&vel_l2g[eN_nDOF_v_trial_element],vel_trial,
w);
5766 ck.valFromDOF(p_old_dof.data(),&p_l2g[eN_nDOF_trial_element],p_trial,p_old);
5767 ck_v.valFromDOF(u_old_dof.data(),&vel_l2g[eN_nDOF_v_trial_element],vel_trial,u_old);
5768 ck_v.valFromDOF(v_old_dof.data(),&vel_l2g[eN_nDOF_v_trial_element],vel_trial,v_old);
5769 ck_v.valFromDOF(w_old_dof.data(),&vel_l2g[eN_nDOF_v_trial_element],vel_trial,w_old);
5771 ck.gradFromDOF(p_dof.data(),&p_l2g[eN_nDOF_trial_element],p_grad_trial_ib,grad_p);
5772 ck_v.gradFromDOF(u_dof.data(),&vel_l2g[eN_nDOF_v_trial_element],vel_grad_trial_ib,grad_u);
5773 ck_v.gradFromDOF(v_dof.data(),&vel_l2g[eN_nDOF_v_trial_element],vel_grad_trial_ib,grad_v);
5774 ck_v.gradFromDOF(w_dof.data(),&vel_l2g[eN_nDOF_v_trial_element],vel_grad_trial_ib,grad_w);
5775 ck.gradFromDOF(p_dof.data(),&p_l2g[eN_nDOF_trial_element],p_grad_trial_ib,grad_p_old);
5776 ck_v.gradFromDOF(u_old_dof.data(),&vel_l2g[eN_nDOF_v_trial_element],vel_grad_trial_ib,grad_u_old);
5777 ck_v.gradFromDOF(v_old_dof.data(),&vel_l2g[eN_nDOF_v_trial_element],vel_grad_trial_ib,grad_v_old);
5778 ck_v.gradFromDOF(w_old_dof.data(),&vel_l2g[eN_nDOF_v_trial_element],vel_grad_trial_ib,grad_w_old);
5781 for (
int j=0;j<nDOF_test_element;j++)
5783 p_test_dV[j] = p_trial[j]*dV;
5784 for (
int I=0;I<nSpace;I++)
5786 p_grad_test_dV[j*nSpace+I] = p_grad_trial_ib[j*nSpace+I]*dV;
5789 for (
int j=0;j<nDOF_v_test_element;j++)
5791 vel_test_dV[j] = vel_trial[j]*dV;
5792 for (
int I=0;I<nSpace;I++)
5794 vel_grad_test_dV[j*nSpace+I] = vel_grad_trial_ib[j*nSpace+I]*dV;
5798 for (
int j=0;j<nDOF_test_element;j++)
5800 p_test_dV[j] = p_test_ref.data()[k*nDOF_trial_element+j]*dV;
5801 for (
int I=0;I<nSpace;I++)
5803 p_grad_test_dV[j*nSpace+I] = p_grad_trial[j*nSpace+I]*dV;
5806 for (
int j=0;j<nDOF_v_test_element;j++)
5808 vel_test_dV[j] = vel_test_ref.data()[k*nDOF_v_trial_element+j]*dV;
5809 for (
int I=0;I<nSpace;I++)
5811 vel_grad_test_dV[j*nSpace+I] = vel_grad_trial[j*nSpace+I]*dV;
5816 double div_mesh_velocity=0.0;
5817 for (
int j=0;j<nDOF_trial_element;j++)
5819 int eN_j=eN*nDOF_trial_element+j;
5820 div_mesh_velocity +=
5821 mesh_velocity_dof.data()[mesh_l2g.data()[eN_j]*3+0]*p_grad_trial[j*nSpace+0] +
5822 mesh_velocity_dof.data()[mesh_l2g.data()[eN_j]*3+1]*p_grad_trial[j*nSpace+1] +
5823 mesh_velocity_dof.data()[mesh_l2g.data()[eN_j]*3+2]*p_grad_trial[j*nSpace+2];
5825 div_mesh_velocity =
DM3*div_mesh_velocity + (1.0-
DM3)*alphaBDF*(dV-q_dV_last.data()[eN_k])/dV;
5828 porosity = q_porosity.data()[eN_k];
5830 double ball_n[nSpace];
5831 if (use_ball_as_particle == 1 && nParticles > 0)
5833 int ball_index=
get_distance_to_ball(nParticles, ball_center.data(), ball_radius.data(),x,y,
z,distance_to_solids.data()[eN_k]);
5834 get_normal_to_ith_ball(nParticles, ball_center.data(), ball_radius.data(),ball_index,x,y,
z,ball_n[0],ball_n[1],ball_n[2]);
5843 double eddy_viscosity(0.);
5844 const double particle_eps = particle_epsFact*(useMetrics*h_phi+(1.0-useMetrics)*elementDiameter.data()[eN]);
5845 const double H_s =
gf_s.
H(particle_eps, phi_solid.data()[eN_k]);
5851 if (fluid_phase == 0)
5862 else if (icase == -1)
5867 else if (icase == 1)
5877 double H = (1.0-useVF)*
gf.
H(eps_rho,
phi[eN_k]) + useVF*fmin(1.0,fmax(0.0,vf[eN_k]));
5878 double ImH = (1.0-useVF)*
gf.
ImH(eps_rho,
phi[eN_k]) + useVF*(1.0-fmin(1.0,fmax(0.0,vf[eN_k])));
5887 elementDiameter.data()[eN],
5888 smagorinskyConstant,
5889 turbulenceClosureModel,
5894 &normal_phi.data()[eN_k_nSpace],
5895 kappa_phi.data()[eN_k],
5899 phi_solid.data()[eN_k],
5918 q_eddy_viscosity_last.data()[eN_k],
5974 mass_source = q_mass_source.data()[eN_k];
5980 q_dragAlpha.data()[eN_k],
5981 q_dragBeta.data()[eN_k],
5994 q_velocity_sge.data()[eN_k_nSpace+0],
5995 q_velocity_sge.data()[eN_k_nSpace+1],
5996 q_velocity_sge.data()[eN_k_nSpace+2],
5997 eps_porous.data()[elementFlags.data()[eN]],
5998 phi_porous.data()[eN_k],
5999 q_velocity_porous.data()[eN_k_nSpace+0],
6000 q_velocity_porous.data()[eN_k_nSpace+1],
6001 q_velocity_porous.data()[eN_k_nSpace+2],
6010 if (turbulenceClosureModel >= 3)
6012 const double c_mu = 0.09;
6014 turbulenceClosureModel,
6026 q_turb_var_0.data()[eN_k],
6027 q_turb_var_1.data()[eN_k],
6028 &q_turb_var_grad_0.data()[eN_k_nSpace],
6048 if (NONCONSERVATIVE_FORM > 0.0)
6050 mom_u_ham -= MOVING_DOMAIN*dmom_u_acc_u*(grad_u[0]*
xt + grad_u[1]*yt + grad_u[2]*zt);
6051 dmom_u_ham_grad_u[0] -= MOVING_DOMAIN*dmom_u_acc_u*
xt;
6052 dmom_u_ham_grad_u[1] -= MOVING_DOMAIN*dmom_u_acc_u*yt;
6053 dmom_u_ham_grad_u[2] -= MOVING_DOMAIN*dmom_u_acc_u*zt;
6057 mom_u_adv[0] -= MOVING_DOMAIN*mom_u_acc*
xt;
6058 mom_u_adv[1] -= MOVING_DOMAIN*mom_u_acc*yt;
6059 mom_u_adv[2] -= MOVING_DOMAIN*mom_u_acc*zt;
6060 dmom_u_adv_u[0] -= MOVING_DOMAIN*dmom_u_acc_u*
xt;
6061 dmom_u_adv_u[1] -= MOVING_DOMAIN*dmom_u_acc_u*yt;
6062 dmom_u_adv_u[2] -= MOVING_DOMAIN*dmom_u_acc_u*zt;
6065 if (NONCONSERVATIVE_FORM > 0.0)
6067 mom_v_ham -= MOVING_DOMAIN*dmom_v_acc_v*(grad_v[0]*
xt + grad_v[1]*yt + grad_v[2]*zt);
6068 dmom_v_ham_grad_v[0] -= MOVING_DOMAIN*dmom_v_acc_v*
xt;
6069 dmom_v_ham_grad_v[1] -= MOVING_DOMAIN*dmom_v_acc_v*yt;
6070 dmom_v_ham_grad_v[2] -= MOVING_DOMAIN*dmom_v_acc_v*zt;
6074 mom_v_adv[0] -= MOVING_DOMAIN*mom_v_acc*
xt;
6075 mom_v_adv[1] -= MOVING_DOMAIN*mom_v_acc*yt;
6076 mom_v_adv[2] -= MOVING_DOMAIN*mom_v_acc*zt;
6077 dmom_v_adv_v[0] -= MOVING_DOMAIN*dmom_v_acc_v*
xt;
6078 dmom_v_adv_v[1] -= MOVING_DOMAIN*dmom_v_acc_v*yt;
6079 dmom_v_adv_v[2] -= MOVING_DOMAIN*dmom_v_acc_v*zt;
6082 if (NONCONSERVATIVE_FORM > 0.0)
6084 mom_w_ham -= MOVING_DOMAIN*dmom_w_acc_w*(grad_w[0]*
xt + grad_w[1]*yt + grad_w[2]*zt);
6085 dmom_w_ham_grad_w[0] -= MOVING_DOMAIN*dmom_w_acc_w*
xt;
6086 dmom_w_ham_grad_w[1] -= MOVING_DOMAIN*dmom_w_acc_w*yt;
6087 dmom_w_ham_grad_w[2] -= MOVING_DOMAIN*dmom_w_acc_w*zt;
6091 mom_w_adv[0] -= MOVING_DOMAIN*mom_w_acc*
xt;
6092 mom_w_adv[1] -= MOVING_DOMAIN*mom_w_acc*yt;
6093 mom_w_adv[2] -= MOVING_DOMAIN*mom_w_acc*zt;
6094 dmom_w_adv_w[0] -= MOVING_DOMAIN*dmom_w_acc_w*
xt;
6095 dmom_w_adv_w[1] -= MOVING_DOMAIN*dmom_w_acc_w*yt;
6096 dmom_w_adv_w[2] -= MOVING_DOMAIN*dmom_w_acc_w*zt;
6102 q_mom_u_acc_beta_bdf.data()[eN_k]*q_dV_last.data()[eN_k]/dV,
6108 q_mom_v_acc_beta_bdf.data()[eN_k]*q_dV_last.data()[eN_k]/dV,
6114 q_mom_w_acc_beta_bdf.data()[eN_k]*q_dV_last.data()[eN_k]/dV,
6119 if (NONCONSERVATIVE_FORM > 0.0)
6121 mom_u_acc_t *= dmom_u_acc_u;
6122 mom_v_acc_t *= dmom_v_acc_v;
6123 mom_w_acc_t *= dmom_w_acc_w;
6128 if (NONCONSERVATIVE_FORM > 0.0)
6130 dmom_adv_sge[0] = 0.0;
6131 dmom_adv_sge[1] = 0.0;
6132 dmom_adv_sge[2] = 0.0;
6133 dmom_ham_grad_sge[0] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+0] - MOVING_DOMAIN*
xt);
6134 dmom_ham_grad_sge[1] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+1] - MOVING_DOMAIN*yt);
6135 dmom_ham_grad_sge[2] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+2] - MOVING_DOMAIN*zt);
6139 dmom_adv_sge[0] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+0] - MOVING_DOMAIN*
xt);
6140 dmom_adv_sge[1] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+1] - MOVING_DOMAIN*yt);
6141 dmom_adv_sge[2] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+2] - MOVING_DOMAIN*zt);
6142 dmom_ham_grad_sge[0] = 0.0;
6143 dmom_ham_grad_sge[1] = 0.0;
6144 dmom_ham_grad_sge[2] = 0.0;
6146 double mv_tau[nSpace]=
ZEROVEC;
6147 mv_tau[0] = dmom_adv_sge[0] + dmom_ham_grad_sge[0];
6148 mv_tau[1] = dmom_adv_sge[1] + dmom_ham_grad_sge[1];
6149 mv_tau[2] = dmom_adv_sge[2] + dmom_ham_grad_sge[2];
6153 pdeResidual_p =
ck.Advection_strong(dmass_adv_u,grad_u) +
6154 ck.Advection_strong(dmass_adv_v,grad_v) +
6155 ck.Advection_strong(dmass_adv_w,grad_w) +
6156 DM2*MOVING_DOMAIN*
ck.Reaction_strong(alphaBDF*(dV-q_dV_last.data()[eN_k])/dV - div_mesh_velocity) +
6157 ck.Reaction_strong(mass_source);
6159 pdeResidual_u =
ck.Mass_strong(mom_u_acc_t) +
6160 ck.Advection_strong(dmom_adv_sge,grad_u) +
6161 ck.Hamiltonian_strong(dmom_ham_grad_sge,grad_u) +
6162 ck.Hamiltonian_strong(dmom_u_ham_grad_p,grad_p) +
6163 ck.Reaction_strong(mom_u_source) -
6164 ck.Reaction_strong(dmom_u_acc_u*
u*div_mesh_velocity);
6166 pdeResidual_v =
ck.Mass_strong(mom_v_acc_t) +
6167 ck.Advection_strong(dmom_adv_sge,grad_v) +
6168 ck.Hamiltonian_strong(dmom_ham_grad_sge,grad_v) +
6169 ck.Hamiltonian_strong(dmom_v_ham_grad_p,grad_p) +
6170 ck.Reaction_strong(mom_v_source) -
6171 ck.Reaction_strong(dmom_v_acc_v*
v*div_mesh_velocity);
6173 pdeResidual_w =
ck.Mass_strong(mom_w_acc_t) +
6174 ck.Advection_strong(dmom_adv_sge,grad_w) +
6175 ck.Hamiltonian_strong(dmom_ham_grad_sge,grad_w) +
6176 ck.Hamiltonian_strong(dmom_w_ham_grad_p,grad_p) +
6177 ck.Reaction_strong(mom_w_source) -
6178 ck.Reaction_strong(dmom_w_acc_w*
w*div_mesh_velocity);
6181 for (
int j=0;j<nDOF_v_trial_element;j++)
6183 int j_nSpace = j*nSpace;
6184 dpdeResidual_p_u[j]=
ck.AdvectionJacobian_strong(dmass_adv_u,&vel_grad_trial_ib[j_nSpace]);
6185 dpdeResidual_p_v[j]=
ck.AdvectionJacobian_strong(dmass_adv_v,&vel_grad_trial_ib[j_nSpace]);
6186 dpdeResidual_p_w[j]=
ck.AdvectionJacobian_strong(dmass_adv_w,&vel_grad_trial_ib[j_nSpace]);
6187 dpdeResidual_u_u[j]=
ck.MassJacobian_strong(dmom_u_acc_u_t,vel_trial[j]) +
6188 ck.HamiltonianJacobian_strong(dmom_ham_grad_sge,&vel_grad_trial_ib[j_nSpace]) +
6189 ck.AdvectionJacobian_strong(dmom_adv_sge,&vel_grad_trial_ib[j_nSpace]) -
6190 ck.ReactionJacobian_strong(dmom_u_acc_u*div_mesh_velocity,vel_trial[j]);
6191 dpdeResidual_v_v[j]=
ck.MassJacobian_strong(dmom_v_acc_v_t,vel_trial[j]) +
6192 ck.HamiltonianJacobian_strong(dmom_ham_grad_sge,&vel_grad_trial_ib[j_nSpace]) +
6193 ck.AdvectionJacobian_strong(dmom_adv_sge,&vel_grad_trial_ib[j_nSpace]) -
6194 ck.ReactionJacobian_strong(dmom_v_acc_v*div_mesh_velocity,vel_trial[j]);
6195 dpdeResidual_w_w[j]=
ck.MassJacobian_strong(dmom_w_acc_w_t,vel_trial[j]) +
6196 ck.HamiltonianJacobian_strong(dmom_ham_grad_sge,&vel_grad_trial_ib[j_nSpace]) +
6197 ck.AdvectionJacobian_strong(dmom_adv_sge,&vel_grad_trial_ib[j_nSpace]) -
6198 ck.ReactionJacobian_strong(dmom_w_acc_w*div_mesh_velocity,vel_trial[j]);
6200 dpdeResidual_u_u[j]+=
ck.ReactionJacobian_strong(dmom_u_source[0],vel_trial[j]);
6201 dpdeResidual_v_v[j]+=
ck.ReactionJacobian_strong(dmom_v_source[1],vel_trial[j]);
6202 dpdeResidual_w_w[j]+=
ck.ReactionJacobian_strong(dmom_w_source[2],vel_trial[j]);
6204 for (
int j=0;j<nDOF_trial_element;j++)
6206 int j_nSpace = j*nSpace;
6207 dpdeResidual_u_p[j]=
ck.HamiltonianJacobian_strong(dmom_u_ham_grad_p,&p_grad_trial_ib[j_nSpace]);
6208 dpdeResidual_v_p[j]=
ck.HamiltonianJacobian_strong(dmom_v_ham_grad_p,&p_grad_trial_ib[j_nSpace]);
6209 dpdeResidual_w_p[j]=
ck.HamiltonianJacobian_strong(dmom_w_ham_grad_p,&p_grad_trial_ib[j_nSpace]);
6213 double tmpR=dmom_u_acc_u_t + dmom_u_source[0];
6215 elementDiameter.data()[eN],
6220 dmom_u_ham_grad_p[0],
6223 q_cfl.data()[eN_k]);
6230 dmom_u_ham_grad_p[0],
6233 q_cfl.data()[eN_k]);
6235 tau_v = useMetrics*tau_v1+(1.0-useMetrics)*tau_v0;
6236 tau_p = useMetrics*tau_p1+(1.0-useMetrics)*tau_p0;
6270 dmom_adv_star[0] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+0] - MOVING_DOMAIN*
xt + useRBLES*subgridError_u);
6271 dmom_adv_star[1] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+1] - MOVING_DOMAIN*yt + useRBLES*subgridError_v);
6272 dmom_adv_star[2] =
inertial_term*dmom_u_acc_u*(q_velocity_sge.data()[eN_k_nSpace+2] - MOVING_DOMAIN*zt + useRBLES*subgridError_w);
6275 for (
int i=0;i<nDOF_test_element;i++)
6277 int i_nSpace = i*nSpace;
6278 Lstar_u_p[i]=
ck.Advection_adjoint(dmass_adv_u,&p_grad_test_dV[i_nSpace]);
6279 Lstar_v_p[i]=
ck.Advection_adjoint(dmass_adv_v,&p_grad_test_dV[i_nSpace]);
6280 Lstar_w_p[i]=
ck.Advection_adjoint(dmass_adv_w,&p_grad_test_dV[i_nSpace]);
6283 for (
int i=0;i<nDOF_v_test_element;i++)
6285 int i_nSpace = i*nSpace;
6286 Lstar_u_u[i]=
ck.Advection_adjoint(dmom_adv_star,&vel_grad_test_dV[i_nSpace]);
6287 Lstar_v_v[i]=
ck.Advection_adjoint(dmom_adv_star,&vel_grad_test_dV[i_nSpace]);
6288 Lstar_w_w[i]=
ck.Advection_adjoint(dmom_adv_star,&vel_grad_test_dV[i_nSpace]);
6289 Lstar_p_u[i]=
ck.Hamiltonian_adjoint(dmom_u_ham_grad_p,&vel_grad_test_dV[i_nSpace]);
6290 Lstar_p_v[i]=
ck.Hamiltonian_adjoint(dmom_v_ham_grad_p,&vel_grad_test_dV[i_nSpace]);
6291 Lstar_p_w[i]=
ck.Hamiltonian_adjoint(dmom_w_ham_grad_p,&vel_grad_test_dV[i_nSpace]);
6293 Lstar_u_u[i]+=
ck.Reaction_adjoint(dmom_u_source[0],vel_test_dV[i]);
6294 Lstar_v_v[i]+=
ck.Reaction_adjoint(dmom_v_source[1],vel_test_dV[i]);
6295 Lstar_w_w[i]+=
ck.Reaction_adjoint(dmom_w_source[2],vel_test_dV[i]);
6299 dmom_u_adv_u[0] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_u);
6300 dmom_u_adv_u[1] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_v);
6301 dmom_u_adv_u[2] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_w);
6303 dmom_v_adv_v[0] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_u);
6304 dmom_v_adv_v[1] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_v);
6305 dmom_v_adv_v[2] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_w);
6307 dmom_w_adv_w[0] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_u);
6308 dmom_w_adv_w[1] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_v);
6309 dmom_w_adv_w[2] +=
inertial_term*dmom_u_acc_u*(useRBLES*subgridError_w);
6314 double level_set_normal[nSpace];
6318 double norm_exact=0.0,norm_cut=0.0;
6319 if (use_ball_as_particle)
6321 for (
int I=0;I<nSpace;I++)
6325 norm_cut += level_set_normal[I]*level_set_normal[I];
6326 norm_exact += ball_n[I]*ball_n[I];
6331 for (
int I=0;I<nSpace;I++)
6335 norm_cut += level_set_normal[I]*level_set_normal[I];
6336 norm_exact += particle_signed_distance_normals.data()[eN_k_3d+I]*particle_signed_distance_normals.data()[eN_k_3d+I];
6339 assert(std::fabs(1.0-norm_cut) < 1.0e-8);
6340 assert(std::fabs(1.0-norm_exact) < 1.0e-8);
6342 for (
int I=0;I<nSpace;I++)
6343 level_set_normal[I]*=-1.0;
6353 if (use_ball_as_particle)
6354 for (
int I=0;I<nSpace;I++)
6355 level_set_normal[I] = ball_n[I];
6357 for (
int I=0;I<nSpace;I++)
6358 level_set_normal[I] = particle_signed_distance_normals.data()[eN_k_3d+I];
6361 NONCONSERVATIVE_FORM,
6362 eN < nElements_owned,
6366 nQuadraturePoints_global,
6367 &particle_signed_distances.data()[eN_k],
6369 &particle_velocities.data()[eN_k_3d],
6370 particle_centroids.data(),
6371 use_ball_as_particle,
6374 ball_velocity.data(),
6375 ball_angular_velocity.data(),
6376 ball_density.data(),
6378 particle_penalty_constant/h_phi,
6397 q_velocity_sge.data()[eN_k_nSpace+0],
6398 q_velocity_sge.data()[eN_k_nSpace+1],
6399 q_velocity_sge.data()[eN_k_nSpace+2],
6418 dmom_u_ham_grad_u_s,
6419 dmom_u_ham_grad_v_s,
6420 dmom_u_ham_grad_w_s,
6425 dmom_v_ham_grad_u_s,
6426 dmom_v_ham_grad_v_s,
6427 dmom_v_ham_grad_w_s,
6432 dmom_w_ham_grad_u_s,
6433 dmom_w_ham_grad_v_s,
6434 dmom_w_ham_grad_w_s,
6442 &particle_netForces_tmp[0],
6443 &particle_netMoments_tmp[0],
6444 &particle_surfaceArea_tmp[0],
6445 &particle_surfaceArea_projected_tmp[0],
6446 &projection_direction_tmp[0],
6447 &particle_volume_tmp[0]);
6453 if (fluid_phase == 0)
6454 H_f =
gf.
ImH(0.,0.);
6460 assert(fluid_phase == 0);
6463 for(
int i=0;i<nDOF_test_element;i++)
6465 int i_nSpace = i*nSpace;
6466 for(
int j=0;j<nDOF_trial_element;j++)
6468 int j_nSpace = j*nSpace;
6469 if (nDOF_test_element == nDOF_v_trial_element)
6471 elementJacobian_p_p[i][j] += H_s*H_f*((1-PRESSURE_PROJECTION_STABILIZATION)*
ck.SubgridErrorJacobian(dsubgridError_u_p[j],Lstar_u_p[i]) +
6472 (1-PRESSURE_PROJECTION_STABILIZATION)*
ck.SubgridErrorJacobian(dsubgridError_v_p[j],Lstar_v_p[i]) +
6473 (1-PRESSURE_PROJECTION_STABILIZATION)*
ck.SubgridErrorJacobian(dsubgridError_w_p[j],Lstar_w_p[i]) +
6474 PRESSURE_PROJECTION_STABILIZATION*
ck.pressureProjection_weak(mom_uu_diff_ten[1], p_trial[j], 1./3., p_test_ref.data()[k*nDOF_test_element +i],dV));
6478 for(
int i=0;i<nDOF_test_element;i++)
6480 int i_nSpace = i*nSpace;
6481 for(
int j=0;j<nDOF_v_trial_element;j++)
6483 int j_nSpace = j*nSpace;
6484 elementJacobian_p_u[i][j] += H_s*H_f*(
ck.AdvectionJacobian_weak(dmass_adv_u,vel_trial[j],&p_grad_test_dV[i_nSpace]) +
6485 ck.MassJacobian_weak(dmass_ham_u,vel_trial[j],p_test_dV[i]));
6486 elementJacobian_p_v[i][j] += H_s*H_f*(
ck.AdvectionJacobian_weak(dmass_adv_v,vel_trial[j],&p_grad_test_dV[i_nSpace]) +
6487 ck.MassJacobian_weak(dmass_ham_v,vel_trial[j],p_test_dV[i]));
6488 elementJacobian_p_w[i][j] += H_s*H_f*(
ck.AdvectionJacobian_weak(dmass_adv_w,vel_trial[j],&p_grad_test_dV[i_nSpace]) +
6489 ck.MassJacobian_weak(dmass_ham_w,vel_trial[j],p_test_dV[i]));
6490 if (nDOF_test_element == nDOF_v_trial_element)
6492 elementJacobian_p_u[i][j] += H_s*H_f*(1-PRESSURE_PROJECTION_STABILIZATION)*
ck.SubgridErrorJacobian(dsubgridError_u_u[j],Lstar_u_p[i]);
6493 elementJacobian_p_v[i][j] += H_s*H_f*(1-PRESSURE_PROJECTION_STABILIZATION)*
ck.SubgridErrorJacobian(dsubgridError_v_v[j],Lstar_v_p[i]);
6494 elementJacobian_p_w[i][j] += H_s*H_f*(1-PRESSURE_PROJECTION_STABILIZATION)*
ck.SubgridErrorJacobian(dsubgridError_w_w[j],Lstar_w_p[i]);
6498 for(
int i=0;i<nDOF_v_test_element;i++)
6500 int i_nSpace = i*nSpace;
6501 for(
int j=0;j<nDOF_trial_element;j++)
6503 int j_nSpace = j*nSpace;
6504 elementJacobian_u_p[i][j] += H_s*H_f*(
ck.HamiltonianJacobian_weak(dmom_u_ham_grad_p,&p_grad_trial_ib[j_nSpace],vel_test_dV[i])+
6505 MOMENTUM_SGE*VELOCITY_SGE*
ck.SubgridErrorJacobian(dsubgridError_u_p[j],Lstar_u_u[i]));
6506 elementJacobian_v_p[i][j] += H_s*H_f*(
ck.HamiltonianJacobian_weak(dmom_v_ham_grad_p,&p_grad_trial_ib[j_nSpace],vel_test_dV[i])+
6507 MOMENTUM_SGE*VELOCITY_SGE*
ck.SubgridErrorJacobian(dsubgridError_v_p[j],Lstar_v_v[i]));
6508 elementJacobian_w_p[i][j] += H_s*H_f*(
ck.HamiltonianJacobian_weak(dmom_w_ham_grad_p,&p_grad_trial_ib[j_nSpace],vel_test_dV[i])+
6509 MOMENTUM_SGE*VELOCITY_SGE*
ck.SubgridErrorJacobian(dsubgridError_w_p[j],Lstar_w_w[i]));
6512 for(
int i=0;i<nDOF_v_test_element;i++)
6514 int i_nSpace = i*nSpace;
6515 for(
int j=0;j<nDOF_v_trial_element;j++)
6517 int j_nSpace = j*nSpace;
6518 elementJacobian_u_u[i][j] += H_s*H_f*(
ck.MassJacobian_weak(dmom_u_acc_u_t,vel_trial[j],vel_test_dV[i]) +
6519 ck.MassJacobian_weak(dmom_u_ham_u,vel_trial[j],vel_test_dV[i]) +
6520 ck.HamiltonianJacobian_weak(dmom_u_ham_grad_u,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6521 ck.AdvectionJacobian_weak(dmom_u_adv_u,vel_trial[j],&vel_grad_test_dV[i_nSpace]) +
6522 ck.SimpleDiffusionJacobian_weak(sdInfo_u_u_rowptr.data(),sdInfo_u_u_colind.data(),mom_uu_diff_ten,&vel_grad_trial_ib[j_nSpace],&vel_grad_test_dV[i_nSpace]) +
6523 ck.ReactionJacobian_weak(dmom_u_source[0]+NONCONSERVATIVE_FORM*dmom_u_acc_u*div_mesh_velocity,vel_trial[j],vel_test_dV[i]) +
6524 MOMENTUM_SGE*PRESSURE_SGE*
ck.SubgridErrorJacobian(dsubgridError_p_u[j],Lstar_p_u[i]) +
6525 MOMENTUM_SGE*VELOCITY_SGE*
ck.SubgridErrorJacobian(dsubgridError_u_u[j],Lstar_u_u[i]) +
6526 ck.NumericalDiffusionJacobian(q_numDiff_u_last.data()[eN_k],&vel_grad_trial_ib[j_nSpace],&vel_grad_test_dV[i_nSpace]));
6527 elementJacobian_u_v[i][j] += H_s*H_f*(
ck.HamiltonianJacobian_weak(dmom_u_ham_grad_v,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6528 ck.AdvectionJacobian_weak(dmom_u_adv_v,vel_trial[j],&vel_grad_test_dV[i_nSpace]) +
6529 ck.MassJacobian_weak(dmom_u_ham_v,vel_trial[j],vel_test_dV[i]) +
6530 ck.SimpleDiffusionJacobian_weak(sdInfo_u_v_rowptr.data(),sdInfo_u_v_colind.data(),mom_uv_diff_ten,&vel_grad_trial_ib[j_nSpace],&vel_grad_test_dV[i_nSpace]) +
6531 ck.ReactionJacobian_weak(dmom_u_source[1],vel_trial[j],vel_test_dV[i]) +
6532 MOMENTUM_SGE*PRESSURE_SGE*
ck.SubgridErrorJacobian(dsubgridError_p_v[j],Lstar_p_u[i]));
6533 elementJacobian_u_w[i][j] += H_s*H_f*(
ck.HamiltonianJacobian_weak(dmom_u_ham_grad_w,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6534 ck.AdvectionJacobian_weak(dmom_u_adv_w,vel_trial[j],&vel_grad_test_dV[i_nSpace]) +
6535 ck.MassJacobian_weak(dmom_u_ham_w,vel_trial[j],vel_test_dV[i]) +
6536 ck.SimpleDiffusionJacobian_weak(sdInfo_u_w_rowptr.data(),sdInfo_u_w_colind.data(),mom_uw_diff_ten,&vel_grad_trial_ib[j_nSpace],&vel_grad_test_dV[i_nSpace]) +
6537 ck.ReactionJacobian_weak(dmom_u_source[2],vel_trial[j],vel_test_dV[i]) +
6538 MOMENTUM_SGE*PRESSURE_SGE*
ck.SubgridErrorJacobian(dsubgridError_p_w[j],Lstar_p_u[i]));
6539 elementJacobian_v_u[i][j] += H_s*H_f*(
ck.HamiltonianJacobian_weak(dmom_v_ham_grad_u,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6540 ck.AdvectionJacobian_weak(dmom_v_adv_u,vel_trial[j],&vel_grad_test_dV[i_nSpace]) +
6541 ck.MassJacobian_weak(dmom_v_ham_u,vel_trial[j],vel_test_dV[i]) +
6542 ck.SimpleDiffusionJacobian_weak(sdInfo_v_u_rowptr.data(),sdInfo_v_u_colind.data(),mom_vu_diff_ten,&vel_grad_trial_ib[j_nSpace],&vel_grad_test_dV[i_nSpace]) +
6543 ck.ReactionJacobian_weak(dmom_v_source[0],vel_trial[j],vel_test_dV[i]) +
6544 MOMENTUM_SGE*PRESSURE_SGE*
ck.SubgridErrorJacobian(dsubgridError_p_u[j],Lstar_p_v[i]));
6545 elementJacobian_v_v[i][j] += H_s*H_f*(
ck.MassJacobian_weak(dmom_v_acc_v_t,vel_trial[j],vel_test_dV[i]) +
6546 ck.MassJacobian_weak(dmom_v_ham_v,vel_trial[j],vel_test_dV[i]) +
6547 ck.HamiltonianJacobian_weak(dmom_v_ham_grad_v,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6548 ck.AdvectionJacobian_weak(dmom_v_adv_v,vel_trial[j],&vel_grad_test_dV[i_nSpace]) +
6549 ck.SimpleDiffusionJacobian_weak(sdInfo_v_v_rowptr.data(),sdInfo_v_v_colind.data(),mom_vv_diff_ten,&vel_grad_trial_ib[j_nSpace],&vel_grad_test_dV[i_nSpace]) +
6550 ck.ReactionJacobian_weak(dmom_v_source[1]+NONCONSERVATIVE_FORM*dmom_v_acc_v*div_mesh_velocity,vel_trial[j],vel_test_dV[i]) +
6551 MOMENTUM_SGE*PRESSURE_SGE*
ck.SubgridErrorJacobian(dsubgridError_p_v[j],Lstar_p_v[i]) +
6552 MOMENTUM_SGE*VELOCITY_SGE*
ck.SubgridErrorJacobian(dsubgridError_v_v[j],Lstar_v_v[i]) +
6553 ck.NumericalDiffusionJacobian(q_numDiff_v_last.data()[eN_k],&vel_grad_trial_ib[j_nSpace],&vel_grad_test_dV[i_nSpace]));
6554 elementJacobian_v_w[i][j] += H_s*H_f*(
ck.HamiltonianJacobian_weak(dmom_v_ham_grad_w,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6555 ck.AdvectionJacobian_weak(dmom_v_adv_w,vel_trial[j],&vel_grad_test_dV[i_nSpace]) +
6556 ck.MassJacobian_weak(dmom_v_ham_w,vel_trial[j],vel_test_dV[i]) +
6557 ck.SimpleDiffusionJacobian_weak(sdInfo_v_w_rowptr.data(),sdInfo_v_w_colind.data(),mom_vw_diff_ten,&vel_grad_trial_ib[j_nSpace],&vel_grad_test_dV[i_nSpace]) +
6558 ck.ReactionJacobian_weak(dmom_v_source[2],vel_trial[j],vel_test_dV[i]) +
6559 MOMENTUM_SGE*PRESSURE_SGE*
ck.SubgridErrorJacobian(dsubgridError_p_w[j],Lstar_p_v[i]));
6560 elementJacobian_w_u[i][j] += H_s*H_f*(
ck.HamiltonianJacobian_weak(dmom_w_ham_grad_u,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6561 ck.AdvectionJacobian_weak(dmom_w_adv_u,vel_trial[j],&vel_grad_test_dV[i_nSpace]) +
6562 ck.MassJacobian_weak(dmom_w_ham_u,vel_trial[j],vel_test_dV[i]) +
6563 ck.SimpleDiffusionJacobian_weak(sdInfo_w_u_rowptr.data(),sdInfo_w_u_colind.data(),mom_wu_diff_ten,&vel_grad_trial_ib[j_nSpace],&vel_grad_test_dV[i_nSpace]) +
6564 ck.ReactionJacobian_weak(dmom_w_source[0],vel_trial[j],vel_test_dV[i]) +
6565 MOMENTUM_SGE*PRESSURE_SGE*
ck.SubgridErrorJacobian(dsubgridError_p_u[j],Lstar_p_w[i]));
6566 elementJacobian_w_v[i][j] += H_s*H_f*(
ck.HamiltonianJacobian_weak(dmom_w_ham_grad_v,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6567 ck.AdvectionJacobian_weak(dmom_w_adv_v,vel_trial[j],&vel_grad_test_dV[i_nSpace]) +
6568 ck.MassJacobian_weak(dmom_w_ham_v,vel_trial[j],vel_test_dV[i]) +
6569 ck.SimpleDiffusionJacobian_weak(sdInfo_w_v_rowptr.data(),sdInfo_w_v_colind.data(),mom_wv_diff_ten,&vel_grad_trial_ib[j_nSpace],&vel_grad_test_dV[i_nSpace]) +
6570 ck.ReactionJacobian_weak(dmom_w_source[1],vel_trial[j],vel_test_dV[i]) +
6571 MOMENTUM_SGE*PRESSURE_SGE*
ck.SubgridErrorJacobian(dsubgridError_p_v[j],Lstar_p_w[i]));
6572 elementJacobian_w_w[i][j] += H_s*H_f*(
ck.MassJacobian_weak(dmom_w_acc_w_t,vel_trial[j],vel_test_dV[i]) +
6573 ck.MassJacobian_weak(dmom_w_ham_w,vel_trial[j],vel_test_dV[i]) +
6574 ck.HamiltonianJacobian_weak(dmom_w_ham_grad_w,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6575 ck.AdvectionJacobian_weak(dmom_w_adv_w,vel_trial[j],&vel_grad_test_dV[i_nSpace]) +
6576 ck.SimpleDiffusionJacobian_weak(sdInfo_w_w_rowptr.data(),sdInfo_w_w_colind.data(),mom_ww_diff_ten,&vel_grad_trial_ib[j_nSpace],&vel_grad_test_dV[i_nSpace]) +
6577 ck.ReactionJacobian_weak(dmom_w_source[2]+NONCONSERVATIVE_FORM*dmom_w_acc_w*div_mesh_velocity,vel_trial[j],vel_test_dV[i]) +
6578 MOMENTUM_SGE*PRESSURE_SGE*
ck.SubgridErrorJacobian(dsubgridError_p_w[j],Lstar_p_w[i]) +
6579 MOMENTUM_SGE*VELOCITY_SGE*
ck.SubgridErrorJacobian(dsubgridError_w_w[j],Lstar_w_w[i]) +
6580 ck.NumericalDiffusionJacobian(q_numDiff_w_last.data()[eN_k],&vel_grad_trial_ib[j_nSpace],&vel_grad_test_dV[i_nSpace]));
6585 for(
int i=0;i<nDOF_v_test_element;i++)
6587 int i_nSpace = i*nSpace;
6588 for(
int j=0;j<nDOF_v_trial_element;j++)
6590 int j_nSpace = j*nSpace;
6591 elementJacobian_u_u[i][j] += H_f*(
ck.MassJacobian_weak(dmom_u_ham_u_s,vel_trial[j],vel_test_dV[i]) +
6592 ck.HamiltonianJacobian_weak(dmom_u_ham_grad_u_s,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6593 ck.AdvectionJacobian_weak(dmom_u_adv_u_s,vel_trial[j],&vel_grad_test_dV[i_nSpace]) +
6594 ck.ReactionJacobian_weak(dmom_u_source_s[0],vel_trial[j],vel_test_dV[i]));
6596 elementJacobian_u_v[i][j] += H_f*(
ck.HamiltonianJacobian_weak(dmom_u_ham_grad_v_s,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6597 ck.ReactionJacobian_weak(dmom_u_source_s[1],vel_trial[j],vel_test_dV[i]));
6599 elementJacobian_u_w[i][j] += H_f*(
ck.HamiltonianJacobian_weak(dmom_u_ham_grad_w_s,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6600 ck.ReactionJacobian_weak(dmom_u_source_s[2],vel_trial[j],vel_test_dV[i]));
6602 elementJacobian_v_u[i][j] += H_f*(
ck.HamiltonianJacobian_weak(dmom_v_ham_grad_u_s,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6603 ck.ReactionJacobian_weak(dmom_v_source_s[0],vel_trial[j],vel_test_dV[i]));
6605 elementJacobian_v_v[i][j] += H_f*(
ck.MassJacobian_weak(dmom_v_ham_v_s,vel_trial[j],vel_test_dV[i]) +
6606 ck.HamiltonianJacobian_weak(dmom_v_ham_grad_v_s,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6607 ck.AdvectionJacobian_weak(dmom_v_adv_v_s,vel_trial[j],&vel_grad_test_dV[i_nSpace]) +
6608 ck.ReactionJacobian_weak(dmom_v_source_s[1],vel_trial[j],vel_test_dV[i]));
6610 elementJacobian_v_w[i][j] += H_f*(
ck.HamiltonianJacobian_weak(dmom_v_ham_grad_w_s,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6611 ck.ReactionJacobian_weak(dmom_v_source_s[2],vel_trial[j],vel_test_dV[i]));
6613 elementJacobian_w_u[i][j] += H_f*(
ck.HamiltonianJacobian_weak(dmom_w_ham_grad_u_s,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6614 ck.ReactionJacobian_weak(dmom_w_source_s[0],vel_trial[j],vel_test_dV[i]));
6616 elementJacobian_w_v[i][j] += H_f*(
ck.HamiltonianJacobian_weak(dmom_w_ham_grad_v_s,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6617 ck.ReactionJacobian_weak(dmom_w_source_s[1],vel_trial[j],vel_test_dV[i]));
6619 elementJacobian_w_w[i][j] += H_f*(
ck.MassJacobian_weak(dmom_w_ham_w_s,vel_trial[j],vel_test_dV[i]) +
6620 ck.HamiltonianJacobian_weak(dmom_w_ham_grad_w_s,&vel_grad_trial_ib[j_nSpace],vel_test_dV[i]) +
6621 ck.AdvectionJacobian_weak(dmom_w_adv_w_s,vel_trial[j],&vel_grad_test_dV[i_nSpace]) +
6622 ck.ReactionJacobian_weak(dmom_w_source_s[2],vel_trial[j],vel_test_dV[i]));
6631 for (
int i=0;i<nDOF_test_element;i++)
6633 int eN_i = eN*nDOF_test_element+i;
6634 for (
int j=0;j<nDOF_trial_element;j++)
6636 int eN_i_j = eN_i*nDOF_trial_element+j;
6637 globalJacobian.data()[csrRowIndeces_p_p.data()[eN_i] + csrColumnOffsets_p_p.data()[eN_i_j]] += elementJacobian_p_p[i][j];
6640 for (
int i=0;i<nDOF_test_element;i++)
6642 int eN_i = eN*nDOF_test_element+i;
6643 for (
int j=0;j<nDOF_v_trial_element;j++)
6645 int eN_i_j = eN_i*nDOF_v_trial_element+j;
6646 globalJacobian.data()[csrRowIndeces_p_u.data()[eN_i] + csrColumnOffsets_p_u.data()[eN_i_j]] += elementJacobian_p_u[i][j];
6647 globalJacobian.data()[csrRowIndeces_p_v.data()[eN_i] + csrColumnOffsets_p_v.data()[eN_i_j]] += elementJacobian_p_v[i][j];
6648 globalJacobian.data()[csrRowIndeces_p_w.data()[eN_i] + csrColumnOffsets_p_w.data()[eN_i_j]] += elementJacobian_p_w[i][j];
6651 for (
int i=0;i<nDOF_v_test_element;i++)
6653 int eN_i = eN*nDOF_v_test_element+i;
6654 for (
int j=0;j<nDOF_trial_element;j++)
6656 int eN_i_j = eN_i*nDOF_trial_element+j;
6657 globalJacobian.data()[csrRowIndeces_u_p.data()[eN_i] + csrColumnOffsets_u_p.data()[eN_i_j]] += elementJacobian_u_p[i][j];
6658 globalJacobian.data()[csrRowIndeces_v_p.data()[eN_i] + csrColumnOffsets_v_p.data()[eN_i_j]] += elementJacobian_v_p[i][j];
6659 globalJacobian.data()[csrRowIndeces_w_p.data()[eN_i] + csrColumnOffsets_w_p.data()[eN_i_j]] += elementJacobian_w_p[i][j];
6662 for (
int i=0;i<nDOF_v_test_element;i++)
6664 int eN_i = eN*nDOF_v_test_element+i;
6665 for (
int j=0;j<nDOF_v_trial_element;j++)
6667 int eN_i_j = eN_i*nDOF_v_trial_element+j;
6668 globalJacobian.data()[csrRowIndeces_u_u.data()[eN_i] + csrColumnOffsets_u_u.data()[eN_i_j]] += elementJacobian_u_u[i][j];
6669 globalJacobian.data()[csrRowIndeces_u_v.data()[eN_i] + csrColumnOffsets_u_v.data()[eN_i_j]] += elementJacobian_u_v[i][j];
6670 globalJacobian.data()[csrRowIndeces_u_w.data()[eN_i] + csrColumnOffsets_u_w.data()[eN_i_j]] += elementJacobian_u_w[i][j];
6672 globalJacobian.data()[csrRowIndeces_v_u.data()[eN_i] + csrColumnOffsets_v_u.data()[eN_i_j]] += elementJacobian_v_u[i][j];
6673 globalJacobian.data()[csrRowIndeces_v_v.data()[eN_i] + csrColumnOffsets_v_v.data()[eN_i_j]] += elementJacobian_v_v[i][j];
6674 globalJacobian.data()[csrRowIndeces_v_w.data()[eN_i] + csrColumnOffsets_v_w.data()[eN_i_j]] += elementJacobian_v_w[i][j];
6676 globalJacobian.data()[csrRowIndeces_w_u.data()[eN_i] + csrColumnOffsets_w_u.data()[eN_i_j]] += elementJacobian_w_u[i][j];
6677 globalJacobian.data()[csrRowIndeces_w_v.data()[eN_i] + csrColumnOffsets_w_v.data()[eN_i_j]] += elementJacobian_w_v[i][j];
6678 globalJacobian.data()[csrRowIndeces_w_w.data()[eN_i] + csrColumnOffsets_w_w.data()[eN_i_j]] += elementJacobian_w_w[i][j];
6685 std::map<int,double> DWp_Dn_jump,DW_Dn_jump;
6686 std::map<std::pair<int, int>,
int> p_p_nz, u_u_nz, v_v_nz, w_w_nz;
6687 double gamma_cutfem=ghost_penalty_constant,gamma_cutfem_p=ghost_penalty_constant,h_cutfem=elementBoundaryDiameter.data()[*it];
6688 int eN_nDOF_v_trial_element = elementBoundaryElementsArray.data()[(*it)*2+0]*nDOF_v_trial_element;
6692 for (
int i_offset=1;i_offset<nDOF_v_trial_element;i_offset++)
6695 double u=u_old_dof.data()[vel_l2g.data()[eN_nDOF_v_trial_element+i]],
6696 v=v_old_dof.data()[vel_l2g.data()[eN_nDOF_v_trial_element+i]],
6697 w=w_old_dof.data()[vel_l2g.data()[eN_nDOF_v_trial_element+i]];
6698 norm_v=fmax(norm_v,sqrt(
u*
u+
v*
v+
w*
w));
6700 double gamma_v_dim =
rho_0*(
nu_0 + norm_v*h_cutfem + alphaBDF*h_cutfem*h_cutfem);
6701 gamma_cutfem_p *= h_cutfem*h_cutfem/gamma_v_dim;
6702 if (NONCONSERVATIVE_FORM)
6703 gamma_cutfem*=gamma_v_dim;
6705 gamma_cutfem*=(gamma_v_dim/
rho_0);
6706 for (
int kb=0;kb<nQuadraturePoints_elementBoundary;kb++)
6708 double Dp_Dn_jump=0.0, Du_Dn_jump=0.0, Dv_Dn_jump=0.0, Dw_Dn_jump=0.0,dS;
6709 for (
int eN_side=0;eN_side < 2; eN_side++)
6712 eN = elementBoundaryElementsArray.data()[ebN*2+eN_side];
6713 for (
int i=0;i<nDOF_test_element;i++)
6714 DWp_Dn_jump[p_l2g.data()[eN*nDOF_test_element+i]] = 0.0;
6715 for (
int i=0;i<nDOF_v_test_element;i++)
6716 DW_Dn_jump[vel_l2g.data()[eN*nDOF_v_test_element+i]] = 0.0;
6718 for (
int eN_side=0;eN_side < 2; eN_side++)
6721 eN = elementBoundaryElementsArray.data()[ebN*2+eN_side],
6722 ebN_local = elementBoundaryLocalElementBoundariesArray.data()[ebN*2+eN_side],
6723 eN_nDOF_trial_element = eN*nDOF_trial_element,
6724 eN_nDOF_v_trial_element = eN*nDOF_v_trial_element,
6725 ebN_local_kb = ebN_local*nQuadraturePoints_elementBoundary+kb,
6726 ebN_local_kb_nSpace = ebN_local_kb*nSpace;
6735 jac_int[nSpace*nSpace],
6737 jacInv_int[nSpace*nSpace],
6738 boundaryJac[nSpace*(nSpace-1)],
6739 metricTensor[(nSpace-1)*(nSpace-1)],
6740 metricTensorDetSqrt,
6741 p_test_dS[nDOF_test_element],vel_test_dS[nDOF_v_test_element],
6742 p_grad_trial_trace[nDOF_trial_element*nSpace],vel_grad_trial_trace[nDOF_v_trial_element*nSpace],
6743 p_grad_test_dS[nDOF_trial_element*nSpace],vel_grad_test_dS[nDOF_v_trial_element*nSpace],
6744 normal[nSpace],x_int,y_int,z_int,xt_int,yt_int,zt_int,integralScaling,
6745 G[nSpace*nSpace],G_dd_G,tr_G,h_phi,h_penalty,penalty,
6746 force_x,force_y,force_z,force_p_x,force_p_y,force_p_z,force_v_x,force_v_y,force_v_z,r_x,r_y,r_z;
6748 ck.calculateMapping_elementBoundary(eN,
6754 mesh_trial_trace_ref.data(),
6755 mesh_grad_trial_trace_ref.data(),
6756 boundaryJac_ref.data(),
6762 metricTensorDetSqrt,
6767 ck.calculateMappingVelocity_elementBoundary(eN,
6771 mesh_velocity_dof.data(),
6773 mesh_trial_trace_ref.data(),
6774 xt_int,yt_int,zt_int,
6779 dS = metricTensorDetSqrt*dS_ref.data()[kb];
6782 ck.gradTrialFromRef(&p_grad_trial_trace_ref.data()[ebN_local_kb_nSpace*nDOF_trial_element],jacInv_int,p_grad_trial_trace);
6783 ck_v.gradTrialFromRef(&vel_grad_trial_trace_ref.data()[ebN_local_kb_nSpace*nDOF_v_trial_element],jacInv_int,vel_grad_trial_trace);
6784 for (
int i=0;i<nDOF_test_element;i++)
6786 int eN_i = eN*nDOF_test_element + i;
6787 for (
int I=0;I<nSpace;I++)
6788 DWp_Dn_jump[p_l2g.data()[eN_i]] += p_grad_trial_trace[i*nSpace+I]*normal[I];
6790 for (
int i=0;i<nDOF_v_test_element;i++)
6792 int eN_i = eN*nDOF_v_test_element + i;
6793 for (
int I=0;I<nSpace;I++)
6794 DW_Dn_jump[vel_l2g.data()[eN_i]] += vel_grad_trial_trace[i*nSpace+I]*normal[I];
6797 for (
int eN_side=0;eN_side < 2; eN_side++)
6800 eN = elementBoundaryElementsArray.data()[ebN*2+eN_side];
6801 for (
int i=0;i<nDOF_test_element;i++)
6803 int eN_i = eN*nDOF_test_element+i;
6804 for (
int eN_side2=0;eN_side2 < 2; eN_side2++)
6806 int eN2 = elementBoundaryElementsArray.data()[ebN*2+eN_side2];
6807 for (
int j=0;j<nDOF_test_element;j++)
6809 int eN_i_j = eN_i*nDOF_test_element + j;
6810 int eN2_j = eN2*nDOF_test_element + j;
6814 i*nDOF_trial_element +
6816 std::pair<int,int> ij = std::make_pair(p_l2g.data()[eN_i], p_l2g.data()[eN2_j]);
6817 if (p_p_nz.count(ij))
6819 assert(p_p_nz[ij] == csrRowIndeces_p_p.data()[eN_i] + csrColumnOffsets_eb_p_p.data()[ebN_i_j]);
6822 p_p_nz[ij] = csrRowIndeces_p_p.data()[eN_i] + csrColumnOffsets_eb_p_p.data()[ebN_i_j];
6826 for (
int i=0;i<nDOF_v_test_element;i++)
6828 int eN_i = eN*nDOF_v_test_element+i;
6829 for (
int eN_side2=0;eN_side2 < 2; eN_side2++)
6831 int eN2 = elementBoundaryElementsArray.data()[ebN*2+eN_side2];
6832 for (
int j=0;j<nDOF_v_test_element;j++)
6834 int eN_i_j = eN_i*nDOF_v_test_element + j;
6835 int eN2_j = eN2*nDOF_v_test_element + j;
6839 i*nDOF_v_trial_element +
6841 std::pair<int,int> ij = std::make_pair(vel_l2g.data()[eN_i], vel_l2g.data()[eN2_j]);
6842 if (u_u_nz.count(ij))
6844 assert(u_u_nz[ij] == csrRowIndeces_u_u.data()[eN_i] + csrColumnOffsets_eb_u_u.data()[ebN_i_j]);
6847 u_u_nz[ij] = csrRowIndeces_u_u.data()[eN_i] + csrColumnOffsets_eb_u_u.data()[ebN_i_j];
6848 if (v_v_nz.count(ij))
6850 assert(v_v_nz[ij] == csrRowIndeces_v_v.data()[eN_i] + csrColumnOffsets_eb_v_v.data()[ebN_i_j]);
6853 v_v_nz[ij] = csrRowIndeces_v_v.data()[eN_i] + csrColumnOffsets_eb_v_v.data()[ebN_i_j];
6854 if (w_w_nz.count(ij))
6856 assert(w_w_nz[ij] == csrRowIndeces_w_w.data()[eN_i] + csrColumnOffsets_eb_w_w.data()[ebN_i_j]);
6859 w_w_nz[ij] = csrRowIndeces_w_w.data()[eN_i] + csrColumnOffsets_eb_w_w.data()[ebN_i_j];
6864 for (std::map<int,double>::iterator Wi_it=DWp_Dn_jump.begin(); Wi_it!=DWp_Dn_jump.end(); ++Wi_it)
6865 for (std::map<int,double>::iterator Wj_it=DWp_Dn_jump.begin(); Wj_it!=DWp_Dn_jump.end(); ++Wj_it)
6867 int i_global = Wi_it->first,
6868 j_global = Wj_it->first;
6869 double DWp_Dn_jump_i = Wi_it->second,
6870 DWp_Dn_jump_j = Wj_it->second;
6871 std::pair<int,int> ij = std::make_pair(i_global, j_global);
6872 globalJacobian.data()[p_p_nz.at(ij)] += gamma_cutfem_p*h_cutfem*DWp_Dn_jump_j*DWp_Dn_jump_i*dS;
6874 for (std::map<int,double>::iterator Wi_it=DW_Dn_jump.begin(); Wi_it!=DW_Dn_jump.end(); ++Wi_it)
6875 for (std::map<int,double>::iterator Wj_it=DW_Dn_jump.begin(); Wj_it!=DW_Dn_jump.end(); ++Wj_it)
6877 int i_global = Wi_it->first,
6878 j_global = Wj_it->first;
6879 double DW_Dn_jump_i = Wi_it->second,
6880 DW_Dn_jump_j = Wj_it->second;
6881 std::pair<int,int> ij = std::make_pair(i_global, j_global);
6882 globalJacobian.data()[u_u_nz.at(ij)] += gamma_cutfem*h_cutfem*DW_Dn_jump_j*DW_Dn_jump_i*dS;
6883 globalJacobian.data()[v_v_nz.at(ij)] += gamma_cutfem*h_cutfem*DW_Dn_jump_j*DW_Dn_jump_i*dS;
6884 globalJacobian.data()[w_w_nz.at(ij)] += gamma_cutfem*h_cutfem*DW_Dn_jump_j*DW_Dn_jump_i*dS;
6892 for (
int ebNE = 0; ebNE < nExteriorElementBoundaries_global; ebNE++)
6894 int ebN = exteriorElementBoundariesArray.data()[ebNE],
6895 eN = elementBoundaryElementsArray.data()[ebN*2+0],
6896 eN_nDOF_trial_element = eN*nDOF_trial_element,
6897 eN_nDOF_v_trial_element = eN*nDOF_v_trial_element,
6898 ebN_local = elementBoundaryLocalElementBoundariesArray.data()[ebN*2+0];
6899 if (boundaryFlags[ebN] < 1)
6901 double eps_rho,eps_mu;
6902 double element_phi[nDOF_mesh_trial_element], element_phi_s[nDOF_mesh_trial_element];
6903 for (
int j=0;j<nDOF_mesh_trial_element;j++)
6905 int eN_j = eN*nDOF_mesh_trial_element+j;
6906 element_phi[j] = phi_nodes.data()[p_l2g.data()[eN_j]];
6907 element_phi_s[j] = phi_solid_nodes.data()[p_l2g.data()[eN_j]];
6909 double element_nodes[nDOF_mesh_trial_element*3];
6910 for (
int i=0;i<nDOF_mesh_trial_element;i++)
6912 int eN_i=eN*nDOF_mesh_trial_element+i;
6913 for(
int I=0;I<3;I++)
6914 element_nodes[i*3 + I] = mesh_dof[mesh_l2g.data()[eN_i]*3 + I];
6916 double mesh_dof_ref[nDOF_mesh_trial_element*3]={0.,0.,0.,1.,0.,0.,0.,1.,0.,0.,0.,1.};
6917 double xb_ref_calc[nQuadraturePoints_elementBoundary*3];
6918 for (
int kb=0;kb<nQuadraturePoints_elementBoundary;kb++)
6920 double x=0.0,y=0.0,
z=0.0;
6921 for (
int j=0;j<nDOF_mesh_trial_element;j++)
6923 int ebN_local_kb = ebN_local*nQuadraturePoints_elementBoundary+kb;
6924 int ebN_local_kb_j = ebN_local_kb*nDOF_mesh_trial_element+j;
6925 x += mesh_dof_ref[j*3+0]*mesh_trial_trace_ref.data()[ebN_local_kb_j];
6926 y += mesh_dof_ref[j*3+1]*mesh_trial_trace_ref.data()[ebN_local_kb_j];
6927 z += mesh_dof_ref[j*3+2]*mesh_trial_trace_ref.data()[ebN_local_kb_j];
6929 xb_ref_calc[3*kb+0] = x;
6930 xb_ref_calc[3*kb+1] = y;
6931 xb_ref_calc[3*kb+2] =
z;
6933 int icase_s =
gf_s.
calculate(element_phi_s, element_nodes, xb_ref_calc,
true);
6937 int icase =
gf.
calculate(element_phi, element_nodes, xb_ref.data(), 1.0,1.0,
true,
false);
6939 for (
int kb=0;kb<nQuadraturePoints_elementBoundary;kb++)
6941 int ebNE_kb = ebNE*nQuadraturePoints_elementBoundary+kb,
6942 ebNE_kb_nSpace = ebNE_kb*nSpace,
6943 ebN_local_kb = ebN_local*nQuadraturePoints_elementBoundary+kb,
6944 ebN_local_kb_nSpace = ebN_local_kb*nSpace;
6946 double phi_s_ext=0.0,
6955 p_old=0.0,u_old=0.0,v_old=0.0,w_old=0.0,
6958 dmom_u_acc_u_ext=0.0,
6960 dmom_v_acc_v_ext=0.0,
6962 dmom_w_acc_w_ext=0.0,
6964 dmass_adv_u_ext[nSpace]=
ZEROVEC,
6965 dmass_adv_v_ext[nSpace]=
ZEROVEC,
6966 dmass_adv_w_ext[nSpace]=
ZEROVEC,
6967 mom_u_adv_ext[nSpace]=
ZEROVEC,
6968 dmom_u_adv_u_ext[nSpace]=
ZEROVEC,
6969 dmom_u_adv_v_ext[nSpace]=
ZEROVEC,
6970 dmom_u_adv_w_ext[nSpace]=
ZEROVEC,
6971 mom_v_adv_ext[nSpace]=
ZEROVEC,
6972 dmom_v_adv_u_ext[nSpace]=
ZEROVEC,
6973 dmom_v_adv_v_ext[nSpace]=
ZEROVEC,
6974 dmom_v_adv_w_ext[nSpace]=
ZEROVEC,
6975 mom_w_adv_ext[nSpace]=
ZEROVEC,
6976 dmom_w_adv_u_ext[nSpace]=
ZEROVEC,
6977 dmom_w_adv_v_ext[nSpace]=
ZEROVEC,
6978 dmom_w_adv_w_ext[nSpace]=
ZEROVEC,
6979 mom_uu_diff_ten_ext[nSpace]=
ZEROVEC,
6980 mom_vv_diff_ten_ext[nSpace]=
ZEROVEC,
6981 mom_ww_diff_ten_ext[nSpace]=
ZEROVEC,
6982 mom_uv_diff_ten_ext[1],
6983 mom_uw_diff_ten_ext[1],
6984 mom_vu_diff_ten_ext[1],
6985 mom_vw_diff_ten_ext[1],
6986 mom_wu_diff_ten_ext[1],
6987 mom_wv_diff_ten_ext[1],
6988 mom_u_source_ext=0.0,
6989 mom_v_source_ext=0.0,
6990 mom_w_source_ext=0.0,
6992 dmom_u_ham_grad_p_ext[nSpace]=
ZEROVEC,
6993 dmom_u_ham_grad_u_ext[nSpace]=
ZEROVEC,
6994 dmom_u_ham_u_ext=0.0,
6995 dmom_u_ham_v_ext=0.0,
6996 dmom_u_ham_w_ext=0.0,
6998 dmom_v_ham_grad_p_ext[nSpace]=
ZEROVEC,
6999 dmom_v_ham_grad_v_ext[nSpace]=
ZEROVEC,
7000 dmom_v_ham_u_ext=0.0,
7001 dmom_v_ham_v_ext=0.0,
7002 dmom_v_ham_w_ext=0.0,
7004 dmom_w_ham_grad_p_ext[nSpace]=
ZEROVEC,
7005 dmom_w_ham_grad_w_ext[nSpace]=
ZEROVEC,
7006 dmom_w_ham_u_ext=0.0,
7007 dmom_w_ham_v_ext=0.0,
7008 dmom_w_ham_w_ext=0.0,
7009 dmom_u_adv_p_ext[nSpace]=
ZEROVEC,
7010 dmom_v_adv_p_ext[nSpace]=
ZEROVEC,
7011 dmom_w_adv_p_ext[nSpace]=
ZEROVEC,
7012 dflux_mass_u_ext=0.0,
7013 dflux_mass_v_ext=0.0,
7014 dflux_mass_w_ext=0.0,
7015 dflux_mom_u_adv_p_ext=0.0,
7016 dflux_mom_u_adv_u_ext=0.0,
7017 dflux_mom_u_adv_v_ext=0.0,
7018 dflux_mom_u_adv_w_ext=0.0,
7019 dflux_mom_v_adv_p_ext=0.0,
7020 dflux_mom_v_adv_u_ext=0.0,
7021 dflux_mom_v_adv_v_ext=0.0,
7022 dflux_mom_v_adv_w_ext=0.0,
7023 dflux_mom_w_adv_p_ext=0.0,
7024 dflux_mom_w_adv_u_ext=0.0,
7025 dflux_mom_w_adv_v_ext=0.0,
7026 dflux_mom_w_adv_w_ext=0.0,
7031 bc_mom_u_acc_ext=0.0,
7032 bc_dmom_u_acc_u_ext=0.0,
7033 bc_mom_v_acc_ext=0.0,
7034 bc_dmom_v_acc_v_ext=0.0,
7035 bc_mom_w_acc_ext=0.0,
7036 bc_dmom_w_acc_w_ext=0.0,
7037 bc_mass_adv_ext[nSpace]=
ZEROVEC,
7038 bc_dmass_adv_u_ext[nSpace]=
ZEROVEC,
7039 bc_dmass_adv_v_ext[nSpace]=
ZEROVEC,
7040 bc_dmass_adv_w_ext[nSpace]=
ZEROVEC,
7041 bc_mom_u_adv_ext[nSpace]=
ZEROVEC,
7042 bc_dmom_u_adv_u_ext[nSpace]=
ZEROVEC,
7043 bc_dmom_u_adv_v_ext[nSpace]=
ZEROVEC,
7044 bc_dmom_u_adv_w_ext[nSpace]=
ZEROVEC,
7045 bc_mom_v_adv_ext[nSpace]=
ZEROVEC,
7046 bc_dmom_v_adv_u_ext[nSpace]=
ZEROVEC,
7047 bc_dmom_v_adv_v_ext[nSpace]=
ZEROVEC,
7048 bc_dmom_v_adv_w_ext[nSpace]=
ZEROVEC,
7049 bc_mom_w_adv_ext[nSpace]=
ZEROVEC,
7050 bc_dmom_w_adv_u_ext[nSpace]=
ZEROVEC,
7051 bc_dmom_w_adv_v_ext[nSpace]=
ZEROVEC,
7052 bc_dmom_w_adv_w_ext[nSpace]=
ZEROVEC,
7053 bc_mom_uu_diff_ten_ext[nSpace]=
ZEROVEC,
7054 bc_mom_vv_diff_ten_ext[nSpace]=
ZEROVEC,
7055 bc_mom_ww_diff_ten_ext[nSpace]=
ZEROVEC,
7056 bc_mom_uv_diff_ten_ext[1],
7057 bc_mom_uw_diff_ten_ext[1],
7058 bc_mom_vu_diff_ten_ext[1],
7059 bc_mom_vw_diff_ten_ext[1],
7060 bc_mom_wu_diff_ten_ext[1],
7061 bc_mom_wv_diff_ten_ext[1],
7062 bc_mom_u_source_ext=0.0,
7063 bc_mom_v_source_ext=0.0,
7064 bc_mom_w_source_ext=0.0,
7065 bc_mom_u_ham_ext=0.0,
7066 bc_dmom_u_ham_grad_p_ext[nSpace]=
ZEROVEC,
7067 bc_dmom_u_ham_grad_u_ext[nSpace]=
ZEROVEC,
7068 bc_dmom_u_ham_u_ext=0.0,
7069 bc_dmom_u_ham_v_ext=0.0,
7070 bc_dmom_u_ham_w_ext=0.0,
7071 bc_mom_v_ham_ext=0.0,
7072 bc_dmom_v_ham_grad_p_ext[nSpace]=
ZEROVEC,
7073 bc_dmom_v_ham_grad_v_ext[nSpace]=
ZEROVEC,
7074 bc_dmom_v_ham_u_ext=0.0,
7075 bc_dmom_v_ham_v_ext=0.0,
7076 bc_dmom_v_ham_w_ext=0.0,
7077 bc_mom_w_ham_ext=0.0,
7078 bc_dmom_w_ham_grad_p_ext[nSpace]=
ZEROVEC,
7079 bc_dmom_w_ham_grad_w_ext[nSpace]=
ZEROVEC,
7080 bc_dmom_w_ham_u_ext=0.0,
7081 bc_dmom_w_ham_v_ext=0.0,
7082 bc_dmom_w_ham_w_ext=0.0,
7083 fluxJacobian_p_p[nDOF_trial_element],
7084 fluxJacobian_p_u[nDOF_v_trial_element],
7085 fluxJacobian_p_v[nDOF_v_trial_element],
7086 fluxJacobian_p_w[nDOF_v_trial_element],
7087 fluxJacobian_u_p[nDOF_trial_element],
7088 fluxJacobian_u_u[nDOF_v_trial_element],
7089 fluxJacobian_u_v[nDOF_v_trial_element],
7090 fluxJacobian_u_w[nDOF_v_trial_element],
7091 fluxJacobian_v_p[nDOF_trial_element],
7092 fluxJacobian_v_u[nDOF_v_trial_element],
7093 fluxJacobian_v_v[nDOF_v_trial_element],
7094 fluxJacobian_v_w[nDOF_v_trial_element],
7095 fluxJacobian_w_p[nDOF_trial_element],
7096 fluxJacobian_w_u[nDOF_v_trial_element],
7097 fluxJacobian_w_v[nDOF_v_trial_element],
7098 fluxJacobian_w_w[nDOF_v_trial_element],
7099 jac_ext[nSpace*nSpace],
7101 jacInv_ext[nSpace*nSpace],
7102 boundaryJac[nSpace*(nSpace-1)],
7103 metricTensor[(nSpace-1)*(nSpace-1)],
7104 metricTensorDetSqrt,
7105 p_grad_trial_trace[nDOF_trial_element*nSpace],
7106 vel_grad_trial_trace[nDOF_v_trial_element*nSpace],
7108 p_test_dS[nDOF_test_element],
7109 vel_test_dS[nDOF_v_test_element],
7111 x_ext,y_ext,z_ext,xt_ext,yt_ext,zt_ext,integralScaling,
7112 vel_grad_test_dS[nDOF_v_trial_element*nSpace],
7116 G[nSpace*nSpace],G_dd_G,tr_G,h_phi,h_penalty,penalty;
7119 ck.calculateMapping_elementBoundary(eN,
7125 mesh_trial_trace_ref.data(),
7126 mesh_grad_trial_trace_ref.data(),
7127 boundaryJac_ref.data(),
7133 metricTensorDetSqrt,
7137 ck.calculateMappingVelocity_elementBoundary(eN,
7141 mesh_velocity_dof.data(),
7143 mesh_trial_trace_ref.data(),
7144 xt_ext,yt_ext,zt_ext,
7150 dS = metricTensorDetSqrt*dS_ref.data()[kb];
7151 ck.calculateG(jacInv_ext,G,G_dd_G,tr_G);
7152 ck.calculateGScale(G,&ebqe_normal_phi_ext.data()[ebNE_kb_nSpace],h_phi);
7154 eps_rho = epsFact_rho*(useMetrics*h_phi+(1.0-useMetrics)*elementDiameter.data()[eN]);
7155 eps_mu = epsFact_mu *(useMetrics*h_phi+(1.0-useMetrics)*elementDiameter.data()[eN]);
7159 ck.gradTrialFromRef(&p_grad_trial_trace_ref.data()[ebN_local_kb_nSpace*nDOF_trial_element],jacInv_ext,p_grad_trial_trace);
7160 ck_v.gradTrialFromRef(&vel_grad_trial_trace_ref.data()[ebN_local_kb_nSpace*nDOF_v_trial_element],jacInv_ext,vel_grad_trial_trace);
7162 ck.valFromDOF(p_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],&p_trial_trace_ref.data()[ebN_local_kb*nDOF_test_element],p_ext);
7163 ck_v.valFromDOF(u_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],u_ext);
7164 ck_v.valFromDOF(v_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],v_ext);
7165 ck_v.valFromDOF(w_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],w_ext);
7166 ck.valFromDOF(p_old_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],&p_trial_trace_ref.data()[ebN_local_kb*nDOF_test_element],p_old);
7167 ck_v.valFromDOF(u_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],u_old);
7168 ck_v.valFromDOF(v_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],v_old);
7169 ck_v.valFromDOF(w_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],&vel_trial_trace_ref.data()[ebN_local_kb*nDOF_v_test_element],w_old);
7170 ck.gradFromDOF(p_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],p_grad_trial_trace,grad_p_ext);
7171 ck_v.gradFromDOF(u_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_u_ext);
7172 ck_v.gradFromDOF(v_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_v_ext);
7173 ck_v.gradFromDOF(w_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_w_ext);
7174 ck.gradFromDOF(p_old_dof.data(),&p_l2g.data()[eN_nDOF_trial_element],p_grad_trial_trace,grad_p_old);
7175 ck_v.gradFromDOF(u_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_u_old);
7176 ck_v.gradFromDOF(v_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_v_old);
7177 ck_v.gradFromDOF(w_old_dof.data(),&vel_l2g.data()[eN_nDOF_v_trial_element],vel_grad_trial_trace,grad_w_old);
7178 ck.valFromDOF(phi_solid_nodes.data(),&p_l2g.data()[eN_nDOF_trial_element],&p_trial_trace_ref.data()[ebN_local_kb*nDOF_test_element],phi_s_ext);
7180 for (
int j=0;j<nDOF_test_element;j++)
7182 p_test_dS[j] = p_test_trace_ref.data()[ebN_local_kb*nDOF_test_element+j]*dS;
7185 for (
int j=0;j<nDOF_v_test_element;j++)
7187 vel_test_dS[j] = vel_test_trace_ref.data()[ebN_local_kb*nDOF_v_test_element+j]*dS;
7188 for (
int I=0;I<nSpace;I++)
7189 vel_grad_test_dS[j*nSpace+I] = vel_grad_trial_trace[j*nSpace+I]*dS;
7194 bc_p_ext = isDOFBoundary_p.data()[ebNE_kb]*ebqe_bc_p_ext.data()[ebNE_kb]+(1-isDOFBoundary_p.data()[ebNE_kb])*p_ext;
7196 bc_u_ext = isDOFBoundary_u.data()[ebNE_kb]*(ebqe_bc_u_ext.data()[ebNE_kb] + MOVING_DOMAIN*xt_ext) + (1-isDOFBoundary_u.data()[ebNE_kb])*u_ext;
7197 bc_v_ext = isDOFBoundary_v.data()[ebNE_kb]*(ebqe_bc_v_ext.data()[ebNE_kb] + MOVING_DOMAIN*yt_ext) + (1-isDOFBoundary_v.data()[ebNE_kb])*v_ext;
7198 bc_w_ext = isDOFBoundary_w.data()[ebNE_kb]*(ebqe_bc_w_ext.data()[ebNE_kb] + MOVING_DOMAIN*zt_ext) + (1-isDOFBoundary_w.data()[ebNE_kb])*w_ext;
7200 porosity_ext = ebqe_porosity_ext.data()[ebNE_kb];
7204 double eddy_viscosity_ext(0.),bc_eddy_viscosity_ext(0.);
7205 if (use_ball_as_particle == 1 && nParticles > 0)
7207 get_distance_to_ball(nParticles, ball_center.data(), ball_radius.data(),x_ext,y_ext,z_ext,ebqe_phi_s.data()[ebNE_kb]);
7210 const double particle_eps = particle_epsFact*(useMetrics*h_phi+(1.0-useMetrics)*elementDiameter.data()[eN]);
7212 double H = (1.0-useVF)*
gf.
H(eps_rho,ebqe_phi_ext.data()[ebNE_kb]) + useVF*fmin(1.0,fmax(0.0,ebqe_vf_ext.data()[ebNE_kb]));
7213 double ImH = (1.0-useVF)*
gf.
ImH(eps_rho,ebqe_phi_ext.data()[ebNE_kb]) + useVF*(1.0-fmin(1.0,fmax(0.0,ebqe_vf_ext.data()[ebNE_kb])));
7221 elementDiameter.data()[eN],
7222 smagorinskyConstant,
7223 turbulenceClosureModel,
7226 ebqe_vf_ext.data()[ebNE_kb],
7227 ebqe_phi_ext.data()[ebNE_kb],
7228 &ebqe_normal_phi_ext.data()[ebNE_kb_nSpace],
7229 ebqe_kappa_phi_ext.data()[ebNE_kb],
7233 ebqe_phi_s.data()[ebNE_kb],
7252 ebqe_eddy_viscosity_last.data()[ebNE_kb],
7275 mom_uu_diff_ten_ext,
7276 mom_vv_diff_ten_ext,
7277 mom_ww_diff_ten_ext,
7278 mom_uv_diff_ten_ext,
7279 mom_uw_diff_ten_ext,
7280 mom_vu_diff_ten_ext,
7281 mom_vw_diff_ten_ext,
7282 mom_wu_diff_ten_ext,
7283 mom_wv_diff_ten_ext,
7288 dmom_u_ham_grad_p_ext,
7289 dmom_u_ham_grad_u_ext,
7294 dmom_v_ham_grad_p_ext,
7295 dmom_v_ham_grad_v_ext,
7300 dmom_w_ham_grad_p_ext,
7301 dmom_w_ham_grad_w_ext,
7309 H = (1.0-useVF)*
gf.
H(eps_rho,bc_ebqe_phi_ext.data()[ebNE_kb]) + useVF*fmin(1.0,fmax(0.0,bc_ebqe_vf_ext.data()[ebNE_kb]));
7310 ImH = (1.0-useVF)*
gf.
ImH(eps_rho,bc_ebqe_phi_ext.data()[ebNE_kb]) + useVF*(1.0-fmin(1.0,fmax(0.0,bc_ebqe_vf_ext.data()[ebNE_kb])));
7318 elementDiameter.data()[eN],
7319 smagorinskyConstant,
7320 turbulenceClosureModel,
7323 bc_ebqe_vf_ext.data()[ebNE_kb],
7324 bc_ebqe_phi_ext.data()[ebNE_kb],
7325 &ebqe_normal_phi_ext.data()[ebNE_kb_nSpace],
7326 ebqe_kappa_phi_ext.data()[ebNE_kb],
7330 ebqe_phi_s.data()[ebNE_kb],
7348 bc_eddy_viscosity_ext,
7349 ebqe_eddy_viscosity_last.data()[ebNE_kb],
7351 bc_dmom_u_acc_u_ext,
7353 bc_dmom_v_acc_v_ext,
7355 bc_dmom_w_acc_w_ext,
7361 bc_dmom_u_adv_u_ext,
7362 bc_dmom_u_adv_v_ext,
7363 bc_dmom_u_adv_w_ext,
7365 bc_dmom_v_adv_u_ext,
7366 bc_dmom_v_adv_v_ext,
7367 bc_dmom_v_adv_w_ext,
7369 bc_dmom_w_adv_u_ext,
7370 bc_dmom_w_adv_v_ext,
7371 bc_dmom_w_adv_w_ext,
7372 bc_mom_uu_diff_ten_ext,
7373 bc_mom_vv_diff_ten_ext,
7374 bc_mom_ww_diff_ten_ext,
7375 bc_mom_uv_diff_ten_ext,
7376 bc_mom_uw_diff_ten_ext,
7377 bc_mom_vu_diff_ten_ext,
7378 bc_mom_vw_diff_ten_ext,
7379 bc_mom_wu_diff_ten_ext,
7380 bc_mom_wv_diff_ten_ext,
7381 bc_mom_u_source_ext,
7382 bc_mom_v_source_ext,
7383 bc_mom_w_source_ext,
7385 bc_dmom_u_ham_grad_p_ext,
7386 bc_dmom_u_ham_grad_u_ext,
7387 bc_dmom_u_ham_u_ext,
7388 bc_dmom_u_ham_v_ext,
7389 bc_dmom_u_ham_w_ext,
7391 bc_dmom_v_ham_grad_p_ext,
7392 bc_dmom_v_ham_grad_v_ext,
7393 bc_dmom_v_ham_u_ext,
7394 bc_dmom_v_ham_v_ext,
7395 bc_dmom_v_ham_w_ext,
7397 bc_dmom_w_ham_grad_p_ext,
7398 bc_dmom_w_ham_grad_w_ext,
7399 bc_dmom_w_ham_u_ext,
7400 bc_dmom_w_ham_v_ext,
7401 bc_dmom_w_ham_w_ext,
7406 if (turbulenceClosureModel >= 3)
7408 const double turb_var_grad_0_dummy[nSpace] =
ZEROVEC;
7409 const double c_mu = 0.09;
7411 turbulenceClosureModel,
7419 ebqe_vf_ext.data()[ebNE_kb],
7420 ebqe_phi_ext.data()[ebNE_kb],
7423 ebqe_turb_var_0.data()[ebNE_kb],
7424 ebqe_turb_var_1.data()[ebNE_kb],
7425 turb_var_grad_0_dummy,
7427 mom_uu_diff_ten_ext,
7428 mom_vv_diff_ten_ext,
7429 mom_ww_diff_ten_ext,
7430 mom_uv_diff_ten_ext,
7431 mom_uw_diff_ten_ext,
7432 mom_vu_diff_ten_ext,
7433 mom_vw_diff_ten_ext,
7434 mom_wu_diff_ten_ext,
7435 mom_wv_diff_ten_ext,
7441 turbulenceClosureModel,
7449 ebqe_vf_ext.data()[ebNE_kb],
7450 ebqe_phi_ext.data()[ebNE_kb],
7453 ebqe_turb_var_0.data()[ebNE_kb],
7454 ebqe_turb_var_1.data()[ebNE_kb],
7455 turb_var_grad_0_dummy,
7456 bc_eddy_viscosity_ext,
7457 bc_mom_uu_diff_ten_ext,
7458 bc_mom_vv_diff_ten_ext,
7459 bc_mom_ww_diff_ten_ext,
7460 bc_mom_uv_diff_ten_ext,
7461 bc_mom_uw_diff_ten_ext,
7462 bc_mom_vu_diff_ten_ext,
7463 bc_mom_vw_diff_ten_ext,
7464 bc_mom_wu_diff_ten_ext,
7465 bc_mom_wv_diff_ten_ext,
7466 bc_mom_u_source_ext,
7467 bc_mom_v_source_ext,
7468 bc_mom_w_source_ext);
7473 if (NONCONSERVATIVE_FORM > 0.0)
7475 mom_u_ham_ext -= MOVING_DOMAIN*dmom_u_acc_u_ext*(grad_u_ext[0]*xt_ext +
7476 grad_u_ext[1]*yt_ext +
7477 grad_u_ext[2]*zt_ext);
7478 dmom_u_ham_grad_u_ext[0] -= MOVING_DOMAIN*dmom_u_acc_u_ext*xt_ext;
7479 dmom_u_ham_grad_u_ext[1] -= MOVING_DOMAIN*dmom_u_acc_u_ext*yt_ext;
7480 dmom_u_ham_grad_u_ext[2] -= MOVING_DOMAIN*dmom_u_acc_u_ext*zt_ext;
7484 mom_u_adv_ext[0] -= MOVING_DOMAIN*mom_u_acc_ext*xt_ext;
7485 mom_u_adv_ext[1] -= MOVING_DOMAIN*mom_u_acc_ext*yt_ext;
7486 mom_u_adv_ext[2] -= MOVING_DOMAIN*mom_u_acc_ext*zt_ext;
7487 dmom_u_adv_u_ext[0] -= MOVING_DOMAIN*dmom_u_acc_u_ext*xt_ext;
7488 dmom_u_adv_u_ext[1] -= MOVING_DOMAIN*dmom_u_acc_u_ext*yt_ext;
7489 dmom_u_adv_u_ext[2] -= MOVING_DOMAIN*dmom_u_acc_u_ext*zt_ext;
7492 if (NONCONSERVATIVE_FORM > 0.0)
7494 mom_v_ham_ext -= MOVING_DOMAIN*dmom_v_acc_v_ext*(grad_v_ext[0]*xt_ext +
7495 grad_v_ext[1]*yt_ext +
7496 grad_v_ext[2]*zt_ext);
7497 dmom_v_ham_grad_v_ext[0] -= MOVING_DOMAIN*dmom_v_acc_v_ext*xt_ext;
7498 dmom_v_ham_grad_v_ext[1] -= MOVING_DOMAIN*dmom_v_acc_v_ext*yt_ext;
7499 dmom_v_ham_grad_v_ext[2] -= MOVING_DOMAIN*dmom_v_acc_v_ext*zt_ext;
7503 mom_v_adv_ext[0] -= MOVING_DOMAIN*mom_v_acc_ext*xt_ext;
7504 mom_v_adv_ext[1] -= MOVING_DOMAIN*mom_v_acc_ext*yt_ext;
7505 mom_v_adv_ext[2] -= MOVING_DOMAIN*mom_v_acc_ext*zt_ext;
7506 dmom_v_adv_v_ext[0] -= MOVING_DOMAIN*dmom_v_acc_v_ext*xt_ext;
7507 dmom_v_adv_v_ext[1] -= MOVING_DOMAIN*dmom_v_acc_v_ext*yt_ext;
7508 dmom_v_adv_v_ext[2] -= MOVING_DOMAIN*dmom_v_acc_v_ext*zt_ext;
7511 if (NONCONSERVATIVE_FORM > 0.0)
7513 mom_w_ham_ext -= MOVING_DOMAIN*dmom_w_acc_w_ext*(grad_w_ext[0]*xt_ext +
7514 grad_w_ext[1]*yt_ext +
7515 grad_w_ext[2]*zt_ext);
7516 dmom_w_ham_grad_w_ext[0] -= MOVING_DOMAIN*dmom_w_acc_w_ext*xt_ext;
7517 dmom_w_ham_grad_w_ext[1] -= MOVING_DOMAIN*dmom_w_acc_w_ext*yt_ext;
7518 dmom_w_ham_grad_w_ext[2] -= MOVING_DOMAIN*dmom_w_acc_w_ext*zt_ext;
7522 mom_w_adv_ext[0] -= MOVING_DOMAIN*mom_w_acc_ext*xt_ext;
7523 mom_w_adv_ext[1] -= MOVING_DOMAIN*mom_w_acc_ext*yt_ext;
7524 mom_w_adv_ext[2] -= MOVING_DOMAIN*mom_w_acc_ext*zt_ext;
7525 dmom_w_adv_w_ext[0] -= MOVING_DOMAIN*dmom_w_acc_w_ext*xt_ext;
7526 dmom_w_adv_w_ext[1] -= MOVING_DOMAIN*dmom_w_acc_w_ext*yt_ext;
7527 dmom_w_adv_w_ext[2] -= MOVING_DOMAIN*dmom_w_acc_w_ext*zt_ext;
7531 if (NONCONSERVATIVE_FORM < 1.0)
7533 bc_mom_u_adv_ext[0] -= MOVING_DOMAIN*bc_mom_u_acc_ext*xt_ext;
7534 bc_mom_u_adv_ext[1] -= MOVING_DOMAIN*bc_mom_u_acc_ext*yt_ext;
7535 bc_mom_u_adv_ext[2] -= MOVING_DOMAIN*bc_mom_u_acc_ext*zt_ext;
7537 bc_mom_v_adv_ext[0] -= MOVING_DOMAIN*bc_mom_v_acc_ext*xt_ext;
7538 bc_mom_v_adv_ext[1] -= MOVING_DOMAIN*bc_mom_v_acc_ext*yt_ext;
7539 bc_mom_v_adv_ext[2] -= MOVING_DOMAIN*bc_mom_v_acc_ext*zt_ext;
7541 bc_mom_w_adv_ext[0] -= MOVING_DOMAIN*bc_mom_w_acc_ext*xt_ext;
7542 bc_mom_w_adv_ext[1] -= MOVING_DOMAIN*bc_mom_w_acc_ext*yt_ext;
7543 bc_mom_w_adv_ext[2] -= MOVING_DOMAIN*bc_mom_w_acc_ext*zt_ext;
7549 isDOFBoundary_p.data()[ebNE_kb],
7550 isDOFBoundary_u.data()[ebNE_kb],
7551 isDOFBoundary_v.data()[ebNE_kb],
7552 isDOFBoundary_w.data()[ebNE_kb],
7553 isAdvectiveFluxBoundary_p.data()[ebNE_kb],
7554 isAdvectiveFluxBoundary_u.data()[ebNE_kb],
7555 isAdvectiveFluxBoundary_v.data()[ebNE_kb],
7556 isAdvectiveFluxBoundary_w.data()[ebNE_kb],
7557 dmom_u_ham_grad_p_ext[0],
7567 ebqe_bc_flux_mass_ext.data()[ebNE_kb]+MOVING_DOMAIN*(xt_ext*normal[0]+yt_ext*normal[1]+zt_ext*normal[2]),
7568 ebqe_bc_flux_mom_u_adv_ext.data()[ebNE_kb],
7569 ebqe_bc_flux_mom_v_adv_ext.data()[ebNE_kb],
7570 ebqe_bc_flux_mom_w_adv_ext.data()[ebNE_kb],
7584 dmom_u_ham_grad_u_ext,
7599 dflux_mom_u_adv_p_ext,
7600 dflux_mom_u_adv_u_ext,
7601 dflux_mom_u_adv_v_ext,
7602 dflux_mom_u_adv_w_ext,
7603 dflux_mom_v_adv_p_ext,
7604 dflux_mom_v_adv_u_ext,
7605 dflux_mom_v_adv_v_ext,
7606 dflux_mom_v_adv_w_ext,
7607 dflux_mom_w_adv_p_ext,
7608 dflux_mom_w_adv_u_ext,
7609 dflux_mom_w_adv_v_ext,
7610 dflux_mom_w_adv_w_ext);
7614 ck.calculateGScale(G,normal,h_penalty);
7615 penalty = useMetrics*C_b/h_penalty + (1.0-useMetrics)*ebqe_penalty_ext.data()[ebNE_kb];
7616 if (isActiveElement[eN])
7619 for (
int j=0;j<nDOF_trial_element;j++)
7621 int j_nSpace = j*nSpace,ebN_local_kb_j=ebN_local_kb*nDOF_trial_element+j;
7622 fluxJacobian_p_p[j]=0.0;
7623 fluxJacobian_u_p[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mom_u_adv_p_ext,p_trial_trace_ref.data()[ebN_local_kb_j]);
7624 fluxJacobian_v_p[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mom_v_adv_p_ext,p_trial_trace_ref.data()[ebN_local_kb_j]);
7625 fluxJacobian_w_p[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mom_w_adv_p_ext,p_trial_trace_ref.data()[ebN_local_kb_j]);
7627 for (
int j=0;j<nDOF_v_trial_element;j++)
7629 int j_nSpace = j*nSpace,ebN_local_kb_j=ebN_local_kb*nDOF_v_trial_element+j;
7630 fluxJacobian_p_u[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mass_u_ext,vel_trial_trace_ref.data()[ebN_local_kb_j]);
7631 fluxJacobian_p_v[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mass_v_ext,vel_trial_trace_ref.data()[ebN_local_kb_j]);
7632 fluxJacobian_p_w[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mass_w_ext,vel_trial_trace_ref.data()[ebN_local_kb_j]);
7633 fluxJacobian_u_u[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mom_u_adv_u_ext,vel_trial_trace_ref.data()[ebN_local_kb_j]) +
7635 ebqe_phi_ext.data()[ebNE_kb],
7636 sdInfo_u_u_rowptr.data(),
7637 sdInfo_u_u_colind.data(),
7638 isDOFBoundary_u.data()[ebNE_kb],
7639 isDiffusiveFluxBoundary_u.data()[ebNE_kb],
7641 mom_uu_diff_ten_ext,
7642 vel_trial_trace_ref.data()[ebN_local_kb_j],
7643 &vel_grad_trial_trace[j_nSpace],
7645 fluxJacobian_u_v[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mom_u_adv_v_ext,vel_trial_trace_ref.data()[ebN_local_kb_j]) +
7647 ebqe_phi_ext.data()[ebNE_kb],
7648 sdInfo_u_v_rowptr.data(),
7649 sdInfo_u_v_colind.data(),
7650 isDOFBoundary_v.data()[ebNE_kb],
7651 isDiffusiveFluxBoundary_v.data()[ebNE_kb],
7653 mom_uv_diff_ten_ext,
7654 vel_trial_trace_ref.data()[ebN_local_kb_j],
7655 &vel_grad_trial_trace[j_nSpace],
7657 fluxJacobian_u_w[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mom_u_adv_w_ext,vel_trial_trace_ref.data()[ebN_local_kb_j]) +
7659 ebqe_phi_ext.data()[ebNE_kb],
7660 sdInfo_u_w_rowptr.data(),
7661 sdInfo_u_w_colind.data(),
7662 isDOFBoundary_w.data()[ebNE_kb],
7663 isDiffusiveFluxBoundary_w.data()[ebNE_kb],
7665 mom_uw_diff_ten_ext,
7666 vel_trial_trace_ref.data()[ebN_local_kb_j],
7667 &vel_grad_trial_trace[j_nSpace],
7670 fluxJacobian_v_u[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mom_v_adv_u_ext,vel_trial_trace_ref.data()[ebN_local_kb_j]) +
7672 ebqe_phi_ext.data()[ebNE_kb],
7673 sdInfo_v_u_rowptr.data(),
7674 sdInfo_v_u_colind.data(),
7675 isDOFBoundary_u.data()[ebNE_kb],
7676 isDiffusiveFluxBoundary_u.data()[ebNE_kb],
7678 mom_vu_diff_ten_ext,
7679 vel_trial_trace_ref.data()[ebN_local_kb_j],
7680 &vel_grad_trial_trace[j_nSpace],
7682 fluxJacobian_v_v[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mom_v_adv_v_ext,vel_trial_trace_ref.data()[ebN_local_kb_j]) +
7684 ebqe_phi_ext.data()[ebNE_kb],
7685 sdInfo_v_v_rowptr.data(),
7686 sdInfo_v_v_colind.data(),
7687 isDOFBoundary_v.data()[ebNE_kb],
7688 isDiffusiveFluxBoundary_v.data()[ebNE_kb],
7690 mom_vv_diff_ten_ext,
7691 vel_trial_trace_ref.data()[ebN_local_kb_j],
7692 &vel_grad_trial_trace[j_nSpace],
7694 fluxJacobian_v_w[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mom_v_adv_w_ext,vel_trial_trace_ref.data()[ebN_local_kb_j]) +
7696 ebqe_phi_ext.data()[ebNE_kb],
7697 sdInfo_v_w_rowptr.data(),
7698 sdInfo_v_w_colind.data(),
7699 isDOFBoundary_w.data()[ebNE_kb],
7700 isDiffusiveFluxBoundary_w.data()[ebNE_kb],
7702 mom_vw_diff_ten_ext,
7703 vel_trial_trace_ref.data()[ebN_local_kb_j],
7704 &vel_grad_trial_trace[j_nSpace],
7707 fluxJacobian_w_u[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mom_w_adv_u_ext,vel_trial_trace_ref.data()[ebN_local_kb_j]) +
7709 ebqe_phi_ext.data()[ebNE_kb],
7710 sdInfo_w_u_rowptr.data(),
7711 sdInfo_w_u_colind.data(),
7712 isDOFBoundary_u.data()[ebNE_kb],
7713 isDiffusiveFluxBoundary_u.data()[ebNE_kb],
7715 mom_wu_diff_ten_ext,
7716 vel_trial_trace_ref.data()[ebN_local_kb_j],
7717 &vel_grad_trial_trace[j_nSpace],
7719 fluxJacobian_w_v[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mom_w_adv_v_ext,vel_trial_trace_ref.data()[ebN_local_kb_j]) +
7721 ebqe_phi_ext.data()[ebNE_kb],
7722 sdInfo_w_v_rowptr.data(),
7723 sdInfo_w_v_colind.data(),
7724 isDOFBoundary_v.data()[ebNE_kb],
7725 isDiffusiveFluxBoundary_v.data()[ebNE_kb],
7727 mom_wv_diff_ten_ext,
7728 vel_trial_trace_ref.data()[ebN_local_kb_j],
7729 &vel_grad_trial_trace[j_nSpace],
7731 fluxJacobian_w_w[j]=
ck.ExteriorNumericalAdvectiveFluxJacobian(dflux_mom_w_adv_w_ext,vel_trial_trace_ref.data()[ebN_local_kb_j]) +
7733 ebqe_phi_ext.data()[ebNE_kb],
7734 sdInfo_w_w_rowptr.data(),
7735 sdInfo_w_w_colind.data(),
7736 isDOFBoundary_w.data()[ebNE_kb],
7737 isDiffusiveFluxBoundary_w.data()[ebNE_kb],
7739 mom_ww_diff_ten_ext,
7740 vel_trial_trace_ref.data()[ebN_local_kb_j],
7741 &vel_grad_trial_trace[j_nSpace],
7748 const double H_s =
gf_s.
H(particle_eps, ebqe_phi_s[ebNE_kb]);
7749 if (isActiveElement[eN])
7751 for (
int i=0;i<nDOF_test_element;i++)
7753 int eN_i = eN*nDOF_test_element+i;
7754 for (
int j=0;j<nDOF_trial_element;j++)
7756 int eN_j = eN*nDOF_trial_element+j;
7757 int ebN_i_j = ebN*4*
nDOF_test_X_trial_element + i*nDOF_trial_element + j,ebN_local_kb_j=ebN_local_kb*nDOF_trial_element+j;
7759 globalJacobian.data()[csrRowIndeces_p_p[eN_i] + csrColumnOffsets_eb_p_p.data()[ebN_i_j]] += H_s*fluxJacobian_p_p[j]*p_test_dS[i];
7762 for (
int i=0;i<nDOF_test_element;i++)
7764 int eN_i = eN*nDOF_test_element+i;
7765 for (
int j=0;j<nDOF_v_trial_element;j++)
7767 int eN_j = eN*nDOF_v_trial_element+j;
7769 globalJacobian.data()[csrRowIndeces_p_u.data()[eN_i] + csrColumnOffsets_eb_p_u.data()[ebN_i_j]] += H_s*fluxJacobian_p_u[j]*p_test_dS[i];
7770 globalJacobian.data()[csrRowIndeces_p_v.data()[eN_i] + csrColumnOffsets_eb_p_v.data()[ebN_i_j]] += H_s*fluxJacobian_p_v[j]*p_test_dS[i];
7771 globalJacobian.data()[csrRowIndeces_p_w.data()[eN_i] + csrColumnOffsets_eb_p_w.data()[ebN_i_j]] += H_s*fluxJacobian_p_w[j]*p_test_dS[i];
7774 for (
int i=0;i<nDOF_v_test_element;i++)
7776 int eN_i = eN*nDOF_v_test_element+i;
7777 for (
int j=0;j<nDOF_trial_element;j++)
7780 globalJacobian.data()[csrRowIndeces_u_p.data()[eN_i] + csrColumnOffsets_eb_u_p.data()[ebN_i_j]] += H_s*fluxJacobian_u_p[j]*vel_test_dS[i];
7781 globalJacobian.data()[csrRowIndeces_v_p.data()[eN_i] + csrColumnOffsets_eb_v_p.data()[ebN_i_j]] += H_s*fluxJacobian_v_p[j]*vel_test_dS[i];
7782 globalJacobian.data()[csrRowIndeces_w_p.data()[eN_i] + csrColumnOffsets_eb_w_p.data()[ebN_i_j]] += H_s*fluxJacobian_w_p[j]*vel_test_dS[i];
7785 for (
int i=0;i<nDOF_v_test_element;i++)
7787 int eN_i = eN*nDOF_v_test_element+i;
7788 for (
int j=0;j<nDOF_v_trial_element;j++)
7790 int eN_j = eN*nDOF_v_trial_element+j;
7792 globalJacobian.data()[csrRowIndeces_u_u.data()[eN_i] + csrColumnOffsets_eb_u_u.data()[ebN_i_j]] +=
7793 H_s*(fluxJacobian_u_u[j]*vel_test_dS[i]+
7794 ck.ExteriorElementBoundaryDiffusionAdjointJacobian(isDOFBoundary_u.data()[ebNE_kb],
7795 isDiffusiveFluxBoundary_u.data()[ebNE_kb],
7797 vel_trial_trace_ref.data()[ebN_local_kb_j],
7799 sdInfo_u_u_rowptr.data(),
7800 sdInfo_u_u_colind.data(),
7801 mom_uu_diff_ten_ext,
7802 &vel_grad_test_dS[i*nSpace]));
7803 globalJacobian.data()[csrRowIndeces_u_v.data()[eN_i] + csrColumnOffsets_eb_u_v.data()[ebN_i_j]] +=
7804 H_s*(fluxJacobian_u_v[j]*vel_test_dS[i]+
7805 ck.ExteriorElementBoundaryDiffusionAdjointJacobian(isDOFBoundary_v.data()[ebNE_kb],
7806 isDiffusiveFluxBoundary_u.data()[ebNE_kb],
7808 vel_trial_trace_ref.data()[ebN_local_kb_j],
7810 sdInfo_u_v_rowptr.data(),
7811 sdInfo_u_v_colind.data(),
7812 mom_uv_diff_ten_ext,
7813 &vel_grad_test_dS[i*nSpace]));
7814 globalJacobian.data()[csrRowIndeces_u_w.data()[eN_i] + csrColumnOffsets_eb_u_w.data()[ebN_i_j]] +=
7815 H_s*(fluxJacobian_u_w[j]*vel_test_dS[i]+
7816 ck.ExteriorElementBoundaryDiffusionAdjointJacobian(isDOFBoundary_w.data()[ebNE_kb],
7817 isDiffusiveFluxBoundary_u.data()[ebNE_kb],
7819 vel_trial_trace_ref.data()[ebN_local_kb_j],
7821 sdInfo_u_w_rowptr.data(),
7822 sdInfo_u_w_colind.data(),
7823 mom_uw_diff_ten_ext,
7824 &vel_grad_test_dS[i*nSpace]));
7825 globalJacobian.data()[csrRowIndeces_v_u.data()[eN_i] + csrColumnOffsets_eb_v_u.data()[ebN_i_j]] +=
7826 H_s*(fluxJacobian_v_u[j]*vel_test_dS[i]+
7827 ck.ExteriorElementBoundaryDiffusionAdjointJacobian(isDOFBoundary_u.data()[ebNE_kb],
7828 isDiffusiveFluxBoundary_v.data()[ebNE_kb],
7830 vel_trial_trace_ref.data()[ebN_local_kb_j],
7832 sdInfo_v_u_rowptr.data(),
7833 sdInfo_v_u_colind.data(),
7834 mom_vu_diff_ten_ext,
7835 &vel_grad_test_dS[i*nSpace]));
7836 globalJacobian.data()[csrRowIndeces_v_v.data()[eN_i] + csrColumnOffsets_eb_v_v.data()[ebN_i_j]] +=
7837 H_s*(fluxJacobian_v_v[j]*vel_test_dS[i]+
7838 ck.ExteriorElementBoundaryDiffusionAdjointJacobian(isDOFBoundary_v.data()[ebNE_kb],
7839 isDiffusiveFluxBoundary_v.data()[ebNE_kb],
7841 vel_trial_trace_ref.data()[ebN_local_kb_j],
7843 sdInfo_v_v_rowptr.data(),
7844 sdInfo_v_v_colind.data(),
7845 mom_vv_diff_ten_ext,
7846 &vel_grad_test_dS[i*nSpace]));
7847 globalJacobian.data()[csrRowIndeces_v_w.data()[eN_i] + csrColumnOffsets_eb_v_w.data()[ebN_i_j]] +=
7848 H_s*(fluxJacobian_v_w[j]*vel_test_dS[i]+
7849 ck.ExteriorElementBoundaryDiffusionAdjointJacobian(isDOFBoundary_w.data()[ebNE_kb],
7850 isDiffusiveFluxBoundary_v.data()[ebNE_kb],
7852 vel_trial_trace_ref.data()[ebN_local_kb_j],
7854 sdInfo_v_w_rowptr.data(),
7855 sdInfo_v_w_colind.data(),
7856 mom_vw_diff_ten_ext,
7857 &vel_grad_test_dS[i*nSpace]));
7858 globalJacobian.data()[csrRowIndeces_w_u.data()[eN_i] + csrColumnOffsets_eb_w_u.data()[ebN_i_j]] +=
7859 H_s*(fluxJacobian_w_u[j]*vel_test_dS[i]+
7860 ck.ExteriorElementBoundaryDiffusionAdjointJacobian(isDOFBoundary_u.data()[ebNE_kb],
7861 isDiffusiveFluxBoundary_w.data()[ebNE_kb],
7863 vel_trial_trace_ref.data()[ebN_local_kb_j],
7865 sdInfo_w_u_rowptr.data(),
7866 sdInfo_w_u_colind.data(),
7867 mom_wu_diff_ten_ext,
7868 &vel_grad_test_dS[i*nSpace]));
7869 globalJacobian.data()[csrRowIndeces_w_v.data()[eN_i] + csrColumnOffsets_eb_w_v.data()[ebN_i_j]] +=
7870 H_s*(fluxJacobian_w_v[j]*vel_test_dS[i]+
7871 ck.ExteriorElementBoundaryDiffusionAdjointJacobian(isDOFBoundary_v.data()[ebNE_kb],
7872 isDiffusiveFluxBoundary_w.data()[ebNE_kb],
7874 vel_trial_trace_ref.data()[ebN_local_kb_j],
7876 sdInfo_w_v_rowptr.data(),
7877 sdInfo_w_v_colind.data(),
7878 mom_wv_diff_ten_ext,
7879 &vel_grad_test_dS[i*nSpace]));
7880 globalJacobian.data()[csrRowIndeces_w_w.data()[eN_i] + csrColumnOffsets_eb_w_w.data()[ebN_i_j]] +=
7881 H_s*(fluxJacobian_w_w[j]*vel_test_dS[i]+
7882 ck.ExteriorElementBoundaryDiffusionAdjointJacobian(isDOFBoundary_w.data()[ebNE_kb],
7883 isDiffusiveFluxBoundary_w.data()[ebNE_kb],
7885 vel_trial_trace_ref.data()[ebN_local_kb_j],
7887 sdInfo_w_w_rowptr.data(),
7888 sdInfo_w_w_colind.data(),
7889 mom_ww_diff_ten_ext,
7890 &vel_grad_test_dS[i*nSpace]));