93 void getFlux (DimVector& flux,
const Intersection& intersection, Scalar satI, Scalar satJ,
94 const DimVector& pcGradient)
const
96 auto element = intersection.inside();
98 const GlobalPosition& globalPos = element.geometry().center();
100 int globalIdxI = problem_.variables().index(element);
101 CellData& CellDataI = problem_.variables().cellData(globalIdxI);
106 Scalar temperature = problem_.temperature(element);
107 Scalar referencePressure = problem_.referencePressure(element);
111 Scalar mobilityWI = 0;
112 Scalar mobilityNwI = 0;
114 const auto fluidMatrixInteraction = problem_.spatialParams().fluidMatrixInteractionAtPos(element.geometry().center());
117 mobilityWI = CellDataI.mobility(wPhaseIdx);
118 mobilityNwI = CellDataI.mobility(nPhaseIdx);
122 FluidState fluidState;
123 fluidState.setPressure(wPhaseIdx, referencePressure);
124 fluidState.setPressure(nPhaseIdx, referencePressure);
125 fluidState.setTemperature(temperature);
126 mobilityWI = fluidMatrixInteraction.krw(satI);
127 mobilityWI /= FluidSystem::viscosity(fluidState, wPhaseIdx);
128 mobilityNwI = fluidMatrixInteraction.krn(satI);
129 mobilityNwI /= FluidSystem::viscosity(fluidState, nPhaseIdx);
132 DimMatrix meanPermeability(0);
134 if (intersection.neighbor())
137 auto neighbor = intersection.outside();
139 int globalIdxJ = problem_.variables().index(neighbor);
140 CellData& cellDataJ = problem_.variables().cellData(globalIdxJ);
143 const GlobalPosition& globalPosNeighbor = neighbor.geometry().center();
146 DimVector distVec = globalPosNeighbor - globalPos;
149 Scalar dist = distVec.two_norm();
151 DimVector unitDistVec(distVec);
155 problem_.spatialParams().meanK(meanPermeability,
156 problem_.spatialParams().intrinsicPermeability(element),
157 problem_.spatialParams().intrinsicPermeability(neighbor));
160 Scalar mobilityWJ = 0;
161 Scalar mobilityNwJ = 0;
165 mobilityWJ = cellDataJ.mobility(wPhaseIdx);
166 mobilityNwJ = cellDataJ.mobility(nPhaseIdx);
170 FluidState fluidState;
171 fluidState.setPressure(wPhaseIdx, referencePressure);
172 fluidState.setPressure(nPhaseIdx, referencePressure);
173 fluidState.setTemperature(temperature);
175 const auto fluidMatrixInteractionNeighbor = problem_.spatialParams().fluidMatrixInteractionAtPos(neighbor.geometry().center());
176 mobilityWJ = fluidMatrixInteractionNeighbor.krw(satJ);
177 mobilityWJ /= FluidSystem::viscosity(fluidState, wPhaseIdx);
178 mobilityNwJ = fluidMatrixInteractionNeighbor.krn(satJ);
179 mobilityNwJ /= FluidSystem::viscosity(fluidState, nPhaseIdx);
181 Scalar mobilityWMean = 0.5*(mobilityWI + mobilityWJ);
182 Scalar mobilityNwMean = 0.5*(mobilityNwI + mobilityNwJ);
183 mobBar = mobilityWMean*mobilityNwMean/(mobilityWMean+mobilityNwMean);
187 BoundaryTypes bcTypes;
188 problem_.boundaryTypes(bcTypes, intersection);
189 if (bcTypes.isNeumann(pressEqIdx))
191 PrimaryVariables priVars;
192 problem_.neumann(priVars, intersection);
193 if (priVars[wPhaseIdx] == 0)
200 problem_.spatialParams().meanK(meanPermeability,
201 problem_.spatialParams().intrinsicPermeability(element));
203 Scalar mobilityWJ = 0;
204 Scalar mobilityNwJ = 0;
207 FluidState fluidState;
208 fluidState.setPressure(wPhaseIdx, referencePressure);
209 fluidState.setPressure(nPhaseIdx, referencePressure);
210 fluidState.setTemperature(temperature);
211 mobilityWJ = fluidMatrixInteraction.krw(satJ);
212 mobilityWJ /= FluidSystem::viscosity(fluidState, wPhaseIdx);
213 mobilityNwJ = fluidMatrixInteraction.krn(satJ);
214 mobilityNwJ /= FluidSystem::viscosity(fluidState, nPhaseIdx);
216 Scalar mobWMean = 0.5 * (mobilityWI + mobilityWJ);
217 Scalar mobNwMean = 0.5 * (mobilityNwI + mobilityNwJ);
219 mobBar = mobWMean * mobNwMean / (mobWMean + mobNwMean);
223 meanPermeability.mv(pcGradient, flux);