24#ifndef PHASE_FIELD_COUPLING_H
25#define PHASE_FIELD_COUPLING_H
49 template <
typename CELL,
typename PARAMETERS>
52 using V =
typename CELL::value_t;
53 auto w =
parameters.template get<descriptors::INTERFACE_WIDTH>();
54 V phi = cell.template getFieldComponent<descriptors::STATISTIC>(0);
59 else if (phi < (0.01)) {
66 cell.template setField<descriptors::SCALAR>(psi/
util::sqrt(psi*psi+1.));
67 cell.template setField<descriptors::PSI>(psi);
68 cell.template setField<descriptors::PSI0>(psi);
81 template <
typename CELL,
typename PARAMETERS>
84 using V =
typename CELL::value_t;
85 using DESCRIPTOR =
typename CELL::descriptor_t;
87 auto psi = cell.template getField<descriptors::PSI>();
88 auto psi0 = cell.template getField<descriptors::PSI0>();
89 auto epsilon =
parameters.template get<descriptors::EPSILON>();
93 V a = psi - cell.neighbor({-1,0}).
template getField<descriptors::PSI>();
94 V b = cell.neighbor({1,0}).
template getField<descriptors::PSI>() - psi;
95 V c = psi - cell.neighbor({0,-1}).
template getField<descriptors::PSI>();
96 V d = cell.neighbor({0,1}).
template getField<descriptors::PSI>() - psi;
104 if (b*b>a*a) gradX = b;
106 if (d*d>c*c) gradY = d;
115 if (b*b>a*a) gradX = b;
117 if (d*d>c*c) gradY = d;
121 cell.template setField<descriptors::NORMGRADPSI>(
normGradPsi);
123 cell.template setField<descriptors::NORMGRADPSI>(
normGradPsi);
128template<
typename T,
typename DESCRIPTOR,
int xNormal,
int yNormal>
137 template <
typename CELL,
typename PARAMETERS>
140 auto psi = cell.template getField<descriptors::PSI>();
141 auto psi0 = cell.template getField<descriptors::PSI0>();
142 auto epsilon =
parameters.template get<descriptors::EPSILON>();
146 T a = psi - cell.neighbor({-1,0}).
template getField<descriptors::PSI>();
147 T b = cell.neighbor({1,0}).
template getField<descriptors::PSI>() - psi;
148 T c = psi - cell.neighbor({0,-1}).
template getField<descriptors::PSI>();
149 T d = cell.neighbor({0,1}).
template getField<descriptors::PSI>() - psi;
150 if (xNormal == 1) b = a;
151 else if (xNormal == -1) a = b;
152 if (yNormal == 1) d = c;
153 else if (yNormal == -1) c = d;
161 if (b*b>a*a) gradX = b;
163 if (d*d>c*c) gradY = d;
172 if (b*b>a*a) gradX = b;
174 if (d*d>c*c) gradY = d;
178 cell.template setField<descriptors::NORMGRADPSI>(
normGradPsi);
180 cell.template setField<descriptors::NORMGRADPSI>(
normGradPsi);
194 template <
typename CELL,
typename PARAMETERS>
197 using V =
typename CELL::value_t;
199 auto epsilon =
parameters.template get<descriptors::EPSILON>();
200 auto s = cell.template getField<descriptors::SCALAR>();
201 auto psi = cell.template getField<descriptors::PSI>();
203 if (
util::fabs(psi) >= epsilon) cell.template setField<descriptors::PSI>(psi_new);
205 auto normGradPsi = cell.template getField<descriptors::NORMGRADPSI>();
207 cell.template setField<descriptors::PSI>(psi_new);
220 template <
typename CELL,
typename PARAMETERS>
223 using V =
typename CELL::value_t;
224 using DESCRIPTOR =
typename CELL::descriptor_t;
225 V w =
parameters.template get<descriptors::INTERFACE_WIDTH>();
226 V psi = cell.template getField<descriptors::PSI>();
227 auto phi = cell.template getField<descriptors::STATISTIC>();
228 if (fabs(psi) >= 1.5*w) {
229 if (phi[0] > 0.5 && phi[0] < 0.995) {
230 for (
int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
233 }
else if (phi[0] < 0.5 && phi[0] > 0.005) {
234 for (
int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
238 phi[0] = cell.computeRho();
239 cell.template setField<descriptors::STATISTIC>(phi);
252 template <
typename CELL,
typename PARAMETERS>
255 using V =
typename CELL::value_t;
256 V phi = cell.template getFieldComponent<descriptors::STATISTIC>(0);
257 auto epsilon =
parameters.template get<descriptors::EPSILON>();
259 V psi = cell.template getField<descriptors::PSI>();
260 V interfaceIndicator = 0;
261 if (
util::fabs(psi) < epsilon) interfaceIndicator = 1;
262 V top = (1.-interfaceIndicator)*phi*(phi-1.)*(phi-0.5);
263 V bottom = (1.-interfaceIndicator)*(1.-phi)*phi;
265 cell.template setField<descriptors::TOP>(top);
266 cell.template setField<descriptors::BOTTOM>(bottom);
283 template <
typename CELL,
typename PARAMETERS>
286 using V =
typename CELL::template value_t<names::NavierStokes>::value_t;
287 using DESCRIPTOR =
typename CELL::template value_t<names::NavierStokes>::descriptor_t;
289 auto& cellNS = cells.template get<names::NavierStokes>();
290 auto& cellAC = cells.template get<names::Component1>();
292 V phi = cellAC.template getFieldComponent<descriptors::STATISTIC>(0);
296 for (
int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
302 auto scale = cellNS.template getField<descriptors::SCALAR>();
303 auto sigma =
parameters.template get<SIGMA>()*(0.99*scale+0.01);
305 auto rho_v =
parameters.template get<RHOS>()[0];
306 auto rho_l =
parameters.template get<RHOS>()[1];
307 V rho = rho_v + (rho_l-rho_v)*phi;
308 auto tau_v =
parameters.template get<TAUS>()[0];
309 auto tau_l =
parameters.template get<TAUS>()[1];
310 V tau = (tau_v + (tau_l-tau_v)*phi);
311 auto gamma =
parameters.template get<NONLOCALITY>();
312 auto tau_mobil =
parameters.template get<TAUS>()[2];
317 V u[DESCRIPTOR::d] {};
321 V mu = 4*beta*phi*(phi-1.)*(phi-0.5)-k*laplacePhi;
322 forceNS += mu*gradPhi;
323 auto externalForce = cellNS.template getField<descriptors::EXTERNAL_FORCE>();
324 cellNS.template setField<descriptors::FORCE>(externalForce + forceNS/rho);
325 cellNS.template setField<descriptors::NABLARHO>((rho_l-rho_v)*gradPhi);
326 cellNS.template setField<descriptors::TAU_EFF>(tau);
327 cellNS.template setField<descriptors::RHO>(rho);
330 V psi = cellAC.template getField<descriptors::PSI>();
331 V interfaceIndicator = 0.;
332 if (
util::fabs(psi) < 3.*w) interfaceIndicator = 1;
338 for (
int iD=0; iD < DESCRIPTOR::d; ++iD) {
339 gradPhiSqr += gradPhi[iD]*gradPhi[iD];
340 phiU[iD] = phi*u[iD];
342 if (gradPhiSqr >= 1e-28) {
345 old_phiU = cellAC.template getField<descriptors::OLD_PHIU>();
346 cellAC.template setField<descriptors::OLD_PHIU>(phiU);
347 V lambda = 4*phi*(1.-phi)/w;
348 V D_N = 4*beta/k*(interfaceIndicator-1.)*(phi*(phi-1.)*(phi-0.5)-gamma*(1.-phi)*phi);
349 V source_old = cellAC.template getField<descriptors::SOURCE_OLD>();
350 cellAC.template setField<descriptors::SOURCE_OLD>(M*D_N);
352 cellAC.template setField<descriptors::FORCE>(forceAC);
353 V source = 1.5*M*D_N-0.5*source_old;
354 cellAC.template setField<descriptors::SOURCE>(source);
355 cellAC.template setField<descriptors::VELOCITY>(u);
366 template <
typename CELL>
369 using V =
typename CELL::template value_t<names::NavierStokes>::value_t;
370 using DESCRIPTOR =
typename CELL::template value_t<names::NavierStokes>::descriptor_t;
372 auto& cellNS = cells.template get<names::NavierStokes>();
373 auto& cellAC = cells.template get<names::Component1>();
376 V u[DESCRIPTOR::d] {};
378 cellAC.template setField<descriptors::VELOCITY>(u);
393 template <
typename CELL,
typename PARAMETERS>
396 using V =
typename CELL::template value_t<names::NavierStokes>::value_t;
397 using DESCRIPTOR =
typename CELL::template value_t<names::NavierStokes>::descriptor_t;
399 auto& cellNS = cells.template get<names::NavierStokes>();
400 auto& cellAC = cells.template get<names::Component1>();
403 auto sigma =
parameters.template get<SIGMA>();
405 auto rho = cellNS.template getField<descriptors::RHO>();
406 auto nablaRho = cellNS.template getField<descriptors::NABLARHO>();
408 V phi = cellAC.template getFieldComponent<descriptors::STATISTIC>(0);
409 auto cellAC_n1 = cellAC.neighbor({-normal[0],-normal[1]});
410 auto cellNS_n1 = cellNS.neighbor({-normal[0],-normal[1]});
411 V phi_n1 = cellAC_n1.template getFieldComponent<descriptors::STATISTIC>(0);
415 for (
int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
421 for (
int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
422 const V phi_i_n1 = cellAC_n1.neighbor(
descriptors::c<DESCRIPTOR>(iPop)).template getFieldComponent<descriptors::STATISTIC>(0);
429 V mu = 4*beta*phi*(phi-1.)*(phi-0.5)-k*laplacePhi;
430 V mu_n1 = 4*beta*phi_n1*(phi_n1-1.)*(phi_n1-0.5)-k*laplacePhi_n1;
432 V u[DESCRIPTOR::d] {};
434 V rhoU = u[0]*nablaRho[0]+u[1]*nablaRho[1];
435 V p_n1 = cellNS_n1.computeRho();
436 V p_n2 = cellNS.neighbor({-2*normal[0],-2*normal[1]}).computeRho();
437 V p_old = cellNS.computeRho();
438 V p_out = (p_n1 + (mu+mu_n1)/2*(phi-phi_n1));
444 cellNS.defineRho(p_out);
445 for (
int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
459 template <
typename CELL,
typename PARAMETERS>
462 using V =
typename CELL::value_t;
463 using DESCRIPTOR =
typename CELL::descriptor_t;
465 V phi = cell.template getFieldComponent<descriptors::STATISTIC>(0);
469 for (
int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
474 auto w =
parameters.template get<descriptors::INTERFACE_WIDTH>();
481 V u[DESCRIPTOR::d] {};
484 for (
int iD=0; iD < DESCRIPTOR::d; ++iD) {
485 gradPhiSqr += gradPhi[iD]*gradPhi[iD];
486 phiU[iD] = phi*u[iD];
488 if (gradPhiSqr >= 1e-28) {
492 old_phiU = cell.template getField<descriptors::OLD_PHIU>();
493 cell.template setField<descriptors::OLD_PHIU>(phiU);
494 V lambda = 4*phi*(1.-phi)/w;
496 cell.template setField<descriptors::FORCE>(forceAC);
513 template <
typename CELL,
typename PARAMETERS>
516 using V =
typename CELL::template value_t<names::NavierStokes>::value_t;
517 using DESCRIPTOR =
typename CELL::template value_t<names::NavierStokes>::descriptor_t;
519 auto& cellNS = cells.template get<names::NavierStokes>();
520 auto& cellAC = cells.template get<names::Component1>();
522 V phi = cellAC.template getFieldComponent<descriptors::STATISTIC>(0);
526 for (
int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
530 laplacePhi += 2*(phi_i - phi) * tcs2;
533 auto scale = cellNS.template getField<descriptors::SCALAR>();
534 auto sigma =
parameters.template get<SIGMA>()*scale;
536 auto rho_v =
parameters.template get<RHOS>()[0];
537 auto rho_l =
parameters.template get<RHOS>()[1];
538 V rho = rho_v + (rho_l-rho_v)*phi;
539 auto tau_v =
parameters.template get<TAUS>()[0];
540 auto tau_l =
parameters.template get<TAUS>()[1];
541 V tau = (tau_v + (tau_l-tau_v)*phi)*scale + (1-scale)*5.;
545 V u[DESCRIPTOR::d] {};
548 V mu = 4*beta*phi*(phi-1.)*(phi-0.5)-k*laplacePhi;
549 forceNS += mu*gradPhi;
550 auto externalForce = cellNS.template getField<descriptors::EXTERNAL_FORCE>();
551 cellNS.template setField<descriptors::FORCE>(externalForce + forceNS/rho);
552 cellNS.template setField<descriptors::NABLARHO>((rho_l-rho_v)*gradPhi);
553 cellNS.template setField<descriptors::TAU_EFF>(tau);
554 cellNS.template setField<descriptors::RHO>(rho);
561 auto velo_switch =
parameters.template get<SWITCH>();
563 for (
int iD=0; iD < DESCRIPTOR::d; ++iD) {
564 gradPhiSqr += gradPhi[iD]*gradPhi[iD];
565 u[iD] *= velo_switch;
566 phiU[iD] = phi*u[iD];
568 if (gradPhiSqr >= 1e-28) {
571 old_phiU = cellAC.template getField<descriptors::OLD_PHIU>();
572 cellAC.template setField<descriptors::OLD_PHIU>(phiU);
573 V lambda = 4*phi*(1.-phi)/w;
575 cellAC.template setField<descriptors::FORCE>(forceAC);
576 cellAC.template setField<descriptors::VELOCITY>(u);
587 template <
typename CELL>
590 auto statistic = cell.template getField<descriptors::STATISTIC>();
591 statistic[0] = cell.computeRho();
592 cell.template setField<descriptors::STATISTIC>(statistic);
593 cell.template setField<descriptors::PHIWETTING>(statistic[0]);
607 template <
typename CELL,
typename PARAMETERS>
610 using V =
typename CELL::template value_t<names::NavierStokes>::value_t;
611 using DESCRIPTOR =
typename CELL::template value_t<names::NavierStokes>::descriptor_t;
613 auto& cellNS = cells.template get<names::NavierStokes>();
614 auto& cellCH = cells.template get<names::Component1>();
616 V phi = cellCH.template getFieldComponent<descriptors::STATISTIC>(0);
617 V mu = cellCH.template getField<descriptors::CHEM_POTENTIAL>();
622 for (
int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
635 auto rho_v =
parameters.template get<RHOS>()[0];
636 auto rho_l =
parameters.template get<RHOS>()[1];
637 V rho = rho_v + (rho_l-rho_v)*phi;
638 auto tau_v =
parameters.template get<TAUS>()[0];
639 auto tau_l =
parameters.template get<TAUS>()[1];
640 V tau = tau_v + (tau_l-tau_v)*phi;
644 V u[DESCRIPTOR::d] {};
645 forceNS += -phi*gradMu;
648 auto externalBlockForce = cellNS.template getField<descriptors::EXTERNAL_FORCE>();
649 cellNS.template setField<descriptors::FORCE>(externalBlockForce + forceNS/rho);
650 cellNS.template setField<descriptors::NABLARHO>((rho_l-rho_v)*gradPhi);
651 cellNS.template setField<descriptors::TAU_EFF>(tau);
652 cellNS.template setField<descriptors::RHO>(rho);
656 for (
int iD=0; iD < DESCRIPTOR::d; ++iD) {
657 source += gradPhi[iD]*u[iD];
659 V source_old = cellCH.template getField<descriptors::SOURCE_OLD>();
660 cellCH.template setField<descriptors::SOURCE>(1.5*source-0.5*source_old);
661 cellCH.template setField<descriptors::SOURCE_OLD>(source);
662 cellCH.template setField<descriptors::VELOCITY>(u);
674 template <
typename CELL,
typename PARAMETERS>
677 using V =
typename CELL::value_t;
678 using DESCRIPTOR =
typename CELL::descriptor_t;
680 V phi = cell.template getFieldComponent<descriptors::STATISTIC>(0);
683 for (
int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
688 auto sigma =
parameters.template get<descriptors::SCALAR>();
689 auto w =
parameters.template get<descriptors::INTERFACE_WIDTH>();
694 V mu = 4*beta*phi*(phi-1.)*(phi-0.5)+0.25*(phi<0)*phi-k*laplacePhi;
695 cell.template setField<descriptors::CHEM_POTENTIAL>(mu);
699template<
typename T,
typename DESCRIPTOR,
int xNormal,
int yNormal>
708 template <
typename CELL,
typename PARAMETERS>
711 auto theta =
parameters.template get<descriptors::THETA>();
712 auto w =
parameters.template get<descriptors::INTERFACE_WIDTH>();
714 auto phi_n = cell.template getField<descriptors::STATISTIC>();
715 phi_n[0] = cell.neighbor({-xNormal,-yNormal}).computeRho();
717 auto phi_w = phi_n[0] + 4./w * cos(theta) *phi_n[0]*(1-phi_n[0]);
719 cell.template setField<descriptors::PHIWETTING>(phi_w);
721 auto cp_n = cell.template getField<descriptors::CHEM_POTENTIAL>();
722 cp_n = cell.neighbor({-xNormal,-yNormal}).
template getField<descriptors::CHEM_POTENTIAL>();
723 cell.template setField<descriptors::STATISTIC>(phi_n);
724 cell.template setField<descriptors::CHEM_POTENTIAL>(cp_n);
728template<
typename T,
typename DESCRIPTOR,
int xNormal,
int yNormal,
int zNormal>
737 template <
typename CELL,
typename PARAMETERS>
740 auto theta =
parameters.template get<descriptors::THETA>();
741 auto w =
parameters.template get<descriptors::INTERFACE_WIDTH>();
743 auto phi_n = cell.template getField<descriptors::STATISTIC>();
744 phi_n[0] = cell.neighbor({-xNormal,-yNormal,-zNormal}).computeRho();
746 auto phi_w = phi_n[0] + 4./w * cos(theta) *phi_n[0]*(1-phi_n[0]);
748 cell.template setField<descriptors::PHIWETTING>(phi_w);
750 auto cp_n = cell.template getField<descriptors::CHEM_POTENTIAL>();
751 cp_n = cell.neighbor({-xNormal,-yNormal,-zNormal}).
template getField<descriptors::CHEM_POTENTIAL>();
752 cell.template setField<descriptors::STATISTIC>(phi_n);
753 cell.template setField<descriptors::CHEM_POTENTIAL>(cp_n);
757template<
typename T,
typename DESCRIPTOR,
int xNormal,
int yNormal>
766 template <
typename CELL,
typename PARAMETERS>
769 auto theta =
parameters.template get<descriptors::THETA>();
773 auto phi_1 = cell.neighbor({-xNormal,-yNormal}).
template getFieldComponent<descriptors::STATISTIC>(0);
774 auto phi_1r = cell.neighbor({-xNormal,-yNormal}).neighbor(tangent).template getFieldComponent<descriptors::STATISTIC>(0);
775 auto phi_1l = cell.neighbor({-xNormal,-yNormal}).neighbor(opp_tang).template getFieldComponent<descriptors::STATISTIC>(0);
776 auto phi_2r = cell.neighbor({-2*xNormal,-2*yNormal}).neighbor(tangent).template getFieldComponent<descriptors::STATISTIC>(0);
777 auto phi_2l = cell.neighbor({-2*xNormal,-2*yNormal}).neighbor(opp_tang).template getFieldComponent<descriptors::STATISTIC>(0);
779 T dphi_1 = ( phi_1r - phi_1l ) / 2.;
780 T dphi_2 = ( phi_2r - phi_2l ) / 2.;
781 T tau_x_dphi = 1.5*dphi_1 - 0.5*dphi_2;
783 auto phi = cell.template getField<descriptors::STATISTIC>();
784 phi[0] = phi_1 + tan(
M_PI/2. - theta ) *
abs(tau_x_dphi);
785 cell.template setField<descriptors::STATISTIC>(phi);
789template<
typename T,
typename DESCRIPTOR>
798 template <
typename CELL,
typename PARAMETERS>
801 auto phi = cell.template getField<descriptors::STATISTIC>();
804 for (
int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
810 phi[0] = phi[0]/weightSum;
811 cell.template setField<descriptors::STATISTIC>(phi);
815template<
typename T,
typename DESCRIPTOR,
int xNormal,
int yNormal>
824 template <
typename CELL,
typename PARAMETERS>
827 auto phi_s = cell.template getField<descriptors::STATISTIC>();
828 auto phi_b = cell.neighbor({-xNormal,-yNormal}).
template getFieldComponent<descriptors::STATISTIC>(0);
829 if (phi_b >= 0.995) {
832 else if (phi_b <= 0.005) {
836 auto theta = cell.template getField<descriptors::THETA>();
837 auto w =
parameters.template get<descriptors::INTERFACE_WIDTH>();
844 T d = c[0]*n[0]+c[1]*n[1];
847 cell.template setField<descriptors::STATISTIC>(phi_s);
851template<
int xNormal,
int yNormal>
859 template <
typename CELL>
862 using T =
typename CELL::value_t;
863 using DESCRIPTOR =
typename CELL::descriptor_t;
864 T phi, u[DESCRIPTOR::d];
865 auto outlet_cell = cell.template getField<descriptors::CONV_POPS>();
866 cell.computeRhoU(phi, u);
867 for (
int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
870 cell.template setField<descriptors::CONV_POPS>(outlet_cell);
871 auto phiGhost = cell.neighbor({xNormal,yNormal}).
template getField<descriptors::STATISTIC>();
873 cell.neighbor({xNormal,yNormal}).
template setField<descriptors::STATISTIC>(phiGhost);
884 template <
typename CELL>
887 using DESCRIPTOR =
typename CELL::descriptor_t;
889 auto outlet_cell = cell.template getField<descriptors::CONV_POPS>();
892 for (
int iPop=0; iPop < DESCRIPTOR::q; ++iPop) {
893 outlet_cell[iPop] = cell[iPop];
895 cell.template setField<descriptors::CONV_POPS>(outlet_cell);
constexpr T invCs2() any_platform
constexpr T t(unsigned iPop, tag::CUM) any_platform
constexpr int c(unsigned iPop, unsigned iDim) any_platform
ADf< T, DIM > log(const ADf< T, DIM > &a)
ADf< T, DIM > sin(const ADf< T, DIM > &a)
Vector< T, D > normalize(const Vector< T, D > &a)
ADf< T, DIM > tanh(const ADf< T, DIM > &a)
ADf< T, DIM > atanh(const ADf< T, DIM > &a)
ADf< T, DIM > cos(const ADf< T, DIM > &a)
Top level namespace for all of OpenLB.
std::enable_if_t< std::is_arithmetic< T >::type::value, T > abs(T x) any_platform
OperatorScope
Block-wide operator application scopes.
@ PerCell
Per-cell application, i.e. OPERATOR::apply is passed a CELL concept implementation.
@ PerCellWithParameters
Per-cell application with parameters, i.e. OPERATOR::apply is passed a CELL concept implementation an...
static constexpr OperatorScope scope
void apply(CELL &cell, PARAMETERS ¶meters) any_platform
static constexpr OperatorScope scope
void apply(CELL &cells, PARAMETERS ¶meters) any_platform
void apply(CELL &cells, PARAMETERS ¶meters) any_platform
static constexpr OperatorScope scope
static constexpr OperatorScope scope
void apply(CELL &cell, PARAMETERS ¶meters) any_platform
void apply(CELL &cell, PARAMETERS ¶meters) any_platform
static constexpr OperatorScope scope
static constexpr OperatorScope scope
void apply(CELL &cell, PARAMETERS ¶meters) any_platform
void apply(CELL &cell, PARAMETERS ¶meters) any_platform
static constexpr OperatorScope scope
void apply(CELL &cells, PARAMETERS ¶meters) any_platform
static constexpr OperatorScope scope
static constexpr OperatorScope scope
void apply(CELL &cell, PARAMETERS ¶meters) any_platform
void apply(CELL &cell) any_platform
static constexpr OperatorScope scope
void apply(CELL &cell) any_platform
static constexpr OperatorScope scope
static constexpr OperatorScope scope
void apply(CELL &cell) any_platform
static constexpr OperatorScope scope
void apply(CELL &cells) any_platform
void apply(CELL &cells, PARAMETERS ¶meters) any_platform
static constexpr OperatorScope scope
void apply(CELL &cell, PARAMETERS ¶meters) any_platform
static constexpr OperatorScope scope
void apply(CELL &cell, PARAMETERS ¶meters) any_platform
static constexpr OperatorScope scope
Base of a field whose size is defined by [C_0,C_1,C_2]^T * [1,D,Q].
static constexpr OperatorScope scope
void apply(CELL &cell, PARAMETERS ¶meters) any_platform
static V firstOrder(int iPop, const RHO &rho, const U &u) any_platform
Computation of equilibrium distribution, first order in u.
static constexpr OperatorScope scope
void apply(CELL &cell, PARAMETERS ¶meters) any_platform
static constexpr OperatorScope scope
void apply(CELL &cell, PARAMETERS ¶meters) any_platform
void apply(CELL &cell, PARAMETERS ¶meters) any_platform
static constexpr OperatorScope scope
void apply(CELL &cell, PARAMETERS ¶meters) any_platform
static constexpr OperatorScope scope