Last Time Step of Solution
Hi experts,
In my UDF, I want to print some results when it is the last time step of the solution. I found this one:
And, I have set up steady maximum time step to 100.
In my code, I think the solution is found in 10th time step. Currently, to print the result I manually have to get the timestep of 10 using udfGetTimeStep() and then print the final result. The following line of the code is NEVER executed and I never got a file from it.
Is there any way, to find when the result is converged or the solution has been found. I have attached the log file.
Best Answer
-
I would assume that only is 1 when it's the maximum time step indicated for the run. The convergence-based stop likely doesn't set that flag.
If you assume that convergence is always reached by time step 20, for example, you can set max time steps to 20, and use a very low convergence tolerance - like 1.e-12 - such that the stop will always be at the max time step, rather than based on convergence.
I would still wonder if that's going to again write multiple times, as the UDF will get called multiple times.
The other option would be simply to lower the convergence tolerance a bit, maybe to 5.e-4 instead of 1.e-3, such that the last few steps don't have much change in value - and just the UDF from before.1
Answers
-
I would assume that only is 1 when it's the maximum time step indicated for the run. The convergence-based stop likely doesn't set that flag.
If you assume that convergence is always reached by time step 20, for example, you can set max time steps to 20, and use a very low convergence tolerance - like 1.e-12 - such that the stop will always be at the max time step, rather than based on convergence.
I would still wonder if that's going to again write multiple times, as the UDF will get called multiple times.
The other option would be simply to lower the convergence tolerance a bit, maybe to 5.e-4 instead of 1.e-3, such that the last few steps don't have much change in value - and just the UDF from before.1 -
acupro_21778 said:
I would assume that only is 1 when it's the maximum time step indicated for the run. The convergence-based stop likely doesn't set that flag.
If you assume that convergence is always reached by time step 20, for example, you can set max time steps to 20, and use a very low convergence tolerance - like 1.e-12 - such that the stop will always be at the max time step, rather than based on convergence.
I would still wonder if that's going to again write multiple times, as the UDF will get called multiple times.
The other option would be simply to lower the convergence tolerance a bit, maybe to 5.e-4 instead of 1.e-3, such that the last few steps don't have much change in value - and just the UDF from before.I found this one:
I have questions about solution ratio/solution norm and residual ratio/residual norm.
What is the relation of solution ratio or residual ratio with convergence tolerance? Are they same?
Can I get the solution ratio or residual ratio equal to 1e-3? I ran the code as given in the example but I never got that value--the value is 1 in the beginning and 0 everywhere.
My code:
Result:
Results are same for udfGetResidualRatio and udfGetResidualNorm.
Can i track when the convergence tolerance reaches 1e-3 using UDF? Does acuSolve have a udf to extract current convergence ?
0 -
Prabin Pradhananga_20428 said:
I found this one:
I have questions about solution ratio/solution norm and residual ratio/residual norm.
What is the relation of solution ratio or residual ratio with convergence tolerance? Are they same?
Can I get the solution ratio or residual ratio equal to 1e-3? I ran the code as given in the example but I never got that value--the value is 1 in the beginning and 0 everywhere.
My code:
Result:
Results are same for udfGetResidualRatio and udfGetResidualNorm.
Can i track when the convergence tolerance reaches 1e-3 using UDF? Does acuSolve have a udf to extract current convergence ?
Residual Ratio is a global measure of how well the solution matches the equations.
Solution Ratio is a global measure of the change in solution from step to step.
You can look at the <problem>.ss.inc file, or in the CONVERGENCE_CHECK_PARAMETERS command in Command Reference Manual, to see how the various quantities are checked against the given convergence_tolerance value. Standard means same value as convergence tolerance, looser_by_10 means 10X convergence tolerance, etc.1