Phase change / switch variable
Phase change / switch variable
Hi everyone,
First of all, thanks for the softtware, and all the information given in the forum. It really helped me a lot, starting with Elmer.
Now on to my "problems" :
I am trying to simulate the transient heating of a material with a phase change. I was able to setup a model and a simulation which comes close to the practical tests i have done this far.
Now i want to implement the phase change. I already read a lot of topics dealing with several things about phase change and writing UDF.
Some things are still unclear to me:
1) what exactly does "Phase change interval (2,1) = T1 T2" mean? perhaps this could already solve my issues.
2) is it possible to write a UDF with a variable that switches on a specified temperature of the model (i want to create a UDF/model that implements subcooling, for example: the PCM melts at 300K and freezes back again at 270 K ). If there already is a model, i would be happy to know
I can attach my current files, if someone could take a look.
Thanks in advance!
Greetingss,
X=0
First of all, thanks for the softtware, and all the information given in the forum. It really helped me a lot, starting with Elmer.
Now on to my "problems" :
I am trying to simulate the transient heating of a material with a phase change. I was able to setup a model and a simulation which comes close to the practical tests i have done this far.
Now i want to implement the phase change. I already read a lot of topics dealing with several things about phase change and writing UDF.
Some things are still unclear to me:
1) what exactly does "Phase change interval (2,1) = T1 T2" mean? perhaps this could already solve my issues.
2) is it possible to write a UDF with a variable that switches on a specified temperature of the model (i want to create a UDF/model that implements subcooling, for example: the PCM melts at 300K and freezes back again at 270 K ). If there already is a model, i would be happy to know
I can attach my current files, if someone could take a look.
Thanks in advance!
Greetingss,
X=0
 Attachments

 PCMUDF.f90
 (1.1 KiB) Downloaded 315 times

 case.sif
 (3.14 KiB) Downloaded 341 times
Re: Phase change / switch variable
Hi,
short answers for the moment:
1) Since that one is not documented in the Models Manual, the best you can do is look into the code yourself. I did this while ago when I made a simulation with phase change, but did not use the phase change interval feature. I don't have the time to delve into the code right now. I might do it in the next days. It is in HeatSolve.src.
2) Yes, I think so. If you never wrote an udf I advise the Solver Manual and the programmer's tutorial to get started.
HTH,
Matthias
short answers for the moment:
1) Since that one is not documented in the Models Manual, the best you can do is look into the code yourself. I did this while ago when I made a simulation with phase change, but did not use the phase change interval feature. I don't have the time to delve into the code right now. I might do it in the next days. It is in HeatSolve.src.
2) Yes, I think so. If you never wrote an udf I advise the Solver Manual and the programmer's tutorial to get started.
HTH,
Matthias
Re: Phase change / switch variable
Thanks for your answers.
I will have a look at the Heatsolve.src.
i already looked at Solvermanual and the programmers tutorial, that was were i started. unfortunately it didn´t work properly. Think, i have to reprogram or change a few things.
Greetings,
X=0
I will have a look at the Heatsolve.src.
i already looked at Solvermanual and the programmers tutorial, that was were i started. unfortunately it didn´t work properly. Think, i have to reprogram or change a few things.
Greetings,
X=0
Re: Phase change / switch variable
Hi,
from a quick glance at your udf, I think you must associate a phase to every node of the mesh, and save it between successive calls to your udf. I dont' know right away how to do that, however.
HTH,
Matthias
from a quick glance at your udf, I think you must associate a phase to every node of the mesh, and save it between successive calls to your udf. I dont' know right away how to do that, however.
HTH,
Matthias

 Site Admin
 Posts: 3886
 Joined: 22 Aug 2009, 11:57
 Antispam: Yes
 Location: Espoo, Finland
 Contact:
Re: Phase change / switch variable
Hi
The 'phase change intervals' is not really used except for the following
The idea is just to ensure that there are integration points in the interval where the phase change occurs.
So you can as well forget about it and tune the accuracy by hand by changing the h/dt resolution.
What comes to your sif it seems you're trying to combine a Eulerian and a Lagrangian approach. The Eulerian one must use smeared down latent heat i.e. enthalpy. So you need to replace the latent heat with delta functions that result to the same integral over a finite temperature interval. In Lagrangian approach you need a different solver that works on the boundary only and can directly take latent heat. The merits of Eulerian vs. Lagrangian approaches have been discussed before and you should find info on that also in the forum.
Peter
The 'phase change intervals' is not really used except for the following
Code: Select all
! If modelling phase change (and if requested by the user), check if any
! node has jumped over the phase change interval, and if so, reduce
! timestep and or relaxation and recompute.
So you can as well forget about it and tune the accuracy by hand by changing the h/dt resolution.
What comes to your sif it seems you're trying to combine a Eulerian and a Lagrangian approach. The Eulerian one must use smeared down latent heat i.e. enthalpy. So you need to replace the latent heat with delta functions that result to the same integral over a finite temperature interval. In Lagrangian approach you need a different solver that works on the boundary only and can directly take latent heat. The merits of Eulerian vs. Lagrangian approaches have been discussed before and you should find info on that also in the forum.
Peter
Re: Phase change / switch variable
@ Matthias:
I will try that, hope it works, and hope i can do this. i will report back if there is a success.
@ Peter:
There are some leftovers from previous versions. haven´t checked the sif before uploading... I didn´t know about those two approaches. Thanks for the advice. I will study the posts and topics concerning these approaches.
Greetings
X=0
I will try that, hope it works, and hope i can do this. i will report back if there is a success.
@ Peter:
There are some leftovers from previous versions. haven´t checked the sif before uploading... I didn´t know about those two approaches. Thanks for the advice. I will study the posts and topics concerning these approaches.
Greetings
X=0
Re: Phase change / switch variable
Hello Again,
So, after some time, i finally was able to restart my project. So this is what i have so far, and it works (almost).
The enthalpy values are calculated correctly at the given temperatures. Also the subcooling is working properly, so if the material melts (above 350K) there is the crystallization at 348K.
Now i came across other problems. So a short question: is it possible to read in a second variable, e.g. " = variabe temperature, time" in the UDF? and how do i use the second variable in the udf? (e.g. " Function phase (model,n,temp,time)" ? )
The UDF:
The SIF:
Thanks in advance!
Greetings,
X=0
So, after some time, i finally was able to restart my project. So this is what i have so far, and it works (almost).
The enthalpy values are calculated correctly at the given temperatures. Also the subcooling is working properly, so if the material melts (above 350K) there is the crystallization at 348K.
Now i came across other problems. So a short question: is it possible to read in a second variable, e.g. " = variabe temperature, time" in the UDF? and how do i use the second variable in the udf? (e.g. " Function phase (model,n,temp,time)" ? )
The UDF:
Code: Select all
FUNCTION phase(Model, n, temp) RESULT(ent)
USE DefUtils
IMPLICIT None
TYPE(Model_t) :: Model
Integer :: n, ph
REAL(KIND=dp) :: temp, ent
Logical :: ph0 = .true.,ph1 = .False. , ph2 = .False. , ph3 = .False. , ph4 = .False. , ph5 = .False.
if (temp >= 350 .AND. temp <= 353 ) then
if (ph0) then
ph = 1
ph1 = .True.
end if
else if (temp > 353 .AND. temp <= 356) then
if (ph1) then
ph = 2
ph0 = .False.
ph2 = .true.
end if
else if (temp > 356) then
if (ph2) then
ph = 3
ph1 = .false.
ph3 = .true.
end if
else if (temp <= 348 .And. temp > 345) then
if (ph1 .or. ph2 .or. ph3) then
ph = 4
ph2 = .false.
end if
else if (temp <= 345 .AND. temp > 342) then
if (ph1 .or. ph2 .or. ph3 .or. ph4) then
ph = 5
ph3 = .false.
end if
end if
select case (ph)
case (0)
ent = 0
case (1)
ent = 30e6 * (temp  350)
case (2)
ent = 30e6 * (temp 353) + 90e6
case (3)
ent = 0
case (4)
ent = 30e6 * (temp  345)  90e6
case (5)
ent = 30e6 * (temp  342)
end select
END FUNCTION phase
Code: Select all
Header
CHECK KEYWORDS Warn
Mesh DB "." "."
Include Path ""
Results Directory ""
End
Simulation
Max Output Level = 5
Coordinate System = Cartesian
Coordinate Mapping(3) = 1 2 3
Simulation Type = Transient
Steady State Max Iterations = 1
Output Intervals = 1
Timestepping Method = BDF
BDF Order = 1
Timestep intervals = 1000
Timestep Sizes = 0.2
Solver Input File = case.sif
Post File = case.ep
coordinate scaling = 0.001
End
Constants
Gravity(4) = 0 1 0 9.82
Stefan Boltzmann = 5.67e08
Permittivity of Vacuum = 8.8542e12
Boltzmann Constant = 1.3807e23
Unit Charge = 1.602e19
End
Body 1
Target Bodies(1) = 14
Name = "Body 1"
Equation = 2
Material = 1
Initial condition = 1
End
Body 2
Target Bodies(1) = 15
Name = "Body 2"
Equation = 1
Material = 2
Body Force = 1
Initial condition = 1
End
Solver 1
Equation = Result Output
Procedure = "ResultOutputSolve" "ResultOutputSolver"
Output File Name = case
Output Format = Vtu
Exec Solver = Always
End
Solver 2
Equation = Heat Equation
Procedure = "HeatSolve" "HeatSolver"
Variable = dofs 1 Temperature
Exec Solver = Always
Stabilize = True
Bubbles = False
Lumped Mass Matrix = False
Optimize Bandwidth = True
Steady State Convergence Tolerance = 1.0e5
Nonlinear System Convergence Tolerance = 1.0e7
Nonlinear System Max Iterations = 20
Nonlinear System Newton After Iterations = 3
Nonlinear System Newton After Tolerance = 1.0e3
Nonlinear System Relaxation Factor = 1
Linear System Solver = Iterative
Linear System Iterative Method = BiCGStab
Linear System Max Iterations = 500
Linear System Convergence Tolerance = 1.0e10
Linear System Preconditioning = ILU0
Linear System ILUT Tolerance = 1.0e3
Linear System Abort Not Converged = False
Linear System Residual Output = 1
Linear System Precondition Recompute = 1
End
Equation 1
Name = "Widerstaende"
Active Solvers(2) = 1 2
End
Equation 2
Name = "Probe"
Phase Change Model = Spatial 2
check latent heat release = true
Active Solvers(2) = 1 2
End
Material 1
Name = "Aluminium (generic)"
Enthalpy = variable temperature; Real procedure "PCMUDF" "phase"
Heat expansion Coefficient = 23.1e6
Heat Conductivity = 100
Sound speed = 5000.0
Heat Capacity = 1300
Mesh Poisson ratio = 0.35
Density = 1000
Poisson ratio = 0.35
Youngs modulus = 70.0e9
End
Material 2
Name = "Copper (generic)"
Reference Temperature = 293
Heat expansion Coefficient = 16.5e6
Heat Conductivity = 401.0
Sound speed = 3810.0
Heat Capacity = 385.0
Mesh Poisson ratio = 0.34
Density = 8960.0
Poisson ratio = 0.34
Youngs modulus = 115.0e9
End
Body Force 1
Name = "BodyForce 1"
Heat Source = variable time;real;0.0 500;40.0 500;40.1 0;80.0 0;end
End
Initial Condition 1
Name = "InitialCondition 1"
Temperature = 340
End
Greetings,
X=0
Re: Phase change / switch variable
Thanks a lot! haven´t found that ...
Re: Phase change / switch variable
Hi X=0,
1. So, you are making 2 solver input files each for phase changes during temperature rise and recrystallization. Very useful and lucid codes. Also, did you complete inserting the time dependence of enthalpy in your UDF?
2. For the UDF of subcool or recrystallization, is it the requirement of Heat Solver to associate UDF with GetMaterial() and GetConstReal() or you did it just for alert of error?
Yours
Anil Kunwar
1. So, you are making 2 solver input files each for phase changes during temperature rise and recrystallization. Very useful and lucid codes. Also, did you complete inserting the time dependence of enthalpy in your UDF?
2. For the UDF of subcool or recrystallization, is it the requirement of Heat Solver to associate UDF with GetMaterial() and GetConstReal() or you did it just for alert of error?
Yours
Anil Kunwar
Anil Kunwar
Department of Materials Engineering, KU Leuven, Belgium
Department of Materials Engineering, KU Leuven, Belgium