I’m currently working on a physics based approach very similar to the cylinder_2d.py example.
The key difference is that my domain is in the microscale (only 60x60 µm, Cylinder 7 µm) and my fluid has a density of about 1000 kg/m³ and is highly viscous at about 0.05 kg/(m*s).

The problem is that the trained model does not even show flow around a cylinder (as can be seen in the image below). In some cases it even seems that the cylinder is not taken into account when using a microscale domain.

My idea was using the nonDimensionalizer to scale the values, but I couldn’t find any solution for this either. From my point of view, the reason for this seems to be the microscale.

Any idea how to solve this problem? Can Modulus produce good results at the microscale?

Yes, the scaling of the problem can be very important. You should non-dimensionalize or scale your system which may require some experimenting.

However another option to try is integral planes which are used in a number of out flow problems. The idea is to create an integral constraint that will force mass flow rate to be correct across different cross sections of the flow domain. We find these can help with flow related problems.

I have already tried to use the nonDimensionalizer, but I often get the error message that the geometry has no surface. I looked at the source code, but I couldn’t figure out how the non-dimensional values are calculated in detail.

For example, I have defined a value of 0.00003 m and a lenght-scale of 10 m: How does the nonDimensionalizer calculate the non-dimensionalized value in this example?

I am not sure what would cause that error message. The cylinder example provides an example of this utility. Also the non-dimensionalizer code uses Pint under the hood. So perhaps those docs can also help guide you.

Thank you for your answer, I’ve figured it out now. The values you set are devided with the scaling parameters.

But I have another question regarding the continuity planes. How can I set planes on different cross sections in the channel? I tried to use following code, but all planes were generated at the outlet:

criteria=Eq(x, channel_length[1]),

And is there a list of possible outvar criterias? I have only seen the pressure, velocities and the NormalDotVec as criterias.

The criteria is a geometric criteria that is a sympy expression. This defines how to sub-sample the geometry, thus isn’t related to the flow variables. The flow variables (in/outlet boundary condition) are defined via the outvar (target) variables which can be a variety of boundary conditions.

So the example you provided constrains the geometry to just the outlet where x == channel_lenght[1]. This is on the boundary of the domain (assuming boundary constraint) so it will not be able to sample the interior at certain cross sections.

If you have a interior domain where you want to train on some specific cross sections. I would suggest you define a seperate geometry with just these cross-sections then use a PointwiseInteriorConstraint to impose any conditions you have. (There are also examples that have integral planes that use cross section)

E.g. If my domain is a rectangle, this cross-section geometry may be a union of 2D lines at specific locations. I would then use the new geometry in a interior constraint to impose conditions needed.