Thermal simulation of heating a platinum element



I am working on a thermo optic phase modulator where I am using a platinum as a heating element. I want to do thermal simulations in DEVICE so that I can apply a voltage across or pass a current through the platinum element and get the temperature plot of my device in the end. I have been so far unable to carry out these simulations in DEVICE as I could not find the right feature. It would be great if you can help me in solving this problem.



Hi @ydgupta

If I understood correctly, you are looking for ohmic heating the platinum element. We have an application example similar to what you have described:

In this application example, we have used voltage BCs to sweep the voltage across the wire element:

Hope this was helpful.


Hey @bkhanaliloo

Thanks for your help regarding the heating element. Next, I have tried to implement the temperature dependent conductivity by using the model available in the DEVICE materials. I defined the alpha-coefficient to be 9e-5/K for a conductivity of 9.43e6. And when I run the simulation it kept diverging and the temperature of the heating element was blowing up. The temperature change without the temperature dependence of conductivity was around 5 K. It would be great if you could help me in solving this problem.



Hi @ydgupta

I downloaded the file for the Ohmic Heating application example and modified the electrical conductivity for both Aluminium and Copper as you mentioned. The simulation finished running with no problem.

Can you please provide your simulation file and explain that changes you have made to the original file?



Hey @bkhanaliloo

PFA the file I am using for the simulation.
wire_trial.ldev (6.0 MB)

I made some changes so that it resembles our working model. I have changed the Thermal and Conducting properties of the wire element(Conductivity values, Work function etc.). I also changed the geometries of the electrodes and the wire element. In my case, the length of the wire element is 400 micron. And the material surrounding the wire has been changed from ‘Glass’ to ‘Air’. Also, the wire is placed on a block of material which is a conductor of heat.

Now, if I run the simulation it is okay for the case where there is no dependence of conductivity on temperature. But when I implement the temperature dependence of conductivity(as per the model in the file, only for the wire) the simulation diverges.

The simulation does not diverge if I decrease the ‘alpha’ value(for eg.,9e-7) or decrease the voltage applied across the wire. But there seems to be a point where the simulation diverges for the cases with temperature dependence of conductivity even if it is okay for the constant conductivity case(same voltage applied across the wire). I believe changing some simulation parameters should take care of this but I could not exactly figure out which. It would be great if you could help me in getting this solved.

Also, when the simulation runs okay, I do not understand why the wire and the block on which it is placed, all have the same temperature and there is no gradient.
There is one more case where the simulation diverges even if the conductivity is constant. The boundaries of the simulation region in the attached file coincide with the electrode(named ‘right’) along the x-axis. The simulation runs okay for this.
If I increase the size of the simulation region(or decrease the size of the electrode) the simulation diverges.
This does not happen if the surrounding material is ‘Glass’ instead of ‘Air’.

Thanks in advance!

Durvasa Gupta


Hi @ydgupta

Thanks for a detailed clarification and sharing the simulation files with me.

I ran the simulations with electrical conductivity model enabled for Al material. Since the simulation will diverge if I choose a single value for left bias, I instead use a range from 0-2 V with increments of 0.1 V and could run the simulations with no divergence problem:

It is possible that there will be a point where the temperature dependent conductivity model can result in diverged simulations, but it was safe up to 2V (where temperature was increasing few orders of magnitude).

I think the results make sense. The top and bottom BCs are set to a fixed same temperature and you are looking at steady state results. You can probably see this gradient behavior if you were running transient simulations similar to the application example in the link below:

When you extend the simulation boundaries, the heat has to be conducted through air before reaching the bath. However, in the original case heat can be conducted to the bath (simulation boundaries) through metals. Once you change air with glass material, the heat can be dissipated easier through glass and thus simulation will not diverge. As a result wire temperature will increase and will cause the simulation to diverge.

Hope this was helpful.


Dear @bkhanaliloo,

Thanks a lot for your reply. It is surprising that the simulation doesn’t diverge for upto 2V. When I try to simulate it with the conductivity model for ‘Al’, the simulation diverges even for a voltage value 0.1 V. Are there any parameters for the simulation I should be changing? Right now, I am just using the system defaults in the ‘Advanced Settings’ section of the ‘HEAT’ Solver.

Also, When I have the voltage set to 2V the simulation diverges even if the conductivity model for the ‘Al’ material is turned off. So are there any settings I am overlooking which might be causing the problems for me?

Durvasa Gupta


Hi @ydgupta

I downloaded the attached simulation file in your post and only modified the Left voltage Boundary condition as is shown below:


What version are you using? I am using the latest version and simulations run with no error.


Hey @bkhanaliloo,

Thanks for the support. I have one more problem regarding the simulations. If I have a very low voltage across the heating element and run the simulation the wire is getting cooled. Please find attached the simulation result. The boundaries were defined to be at 300 K. cooling_1
It can be seen that there is a temperature drop across the wire element. But when no (or very low) voltage is applied shouldn’t the wire be at room temperature?

Thanks in advance!



Hi @ydgupta

Can you please share your simulation file with me? If the bath temperature is kept at 300K, the results that you are seeing is strange.


Hi @bkhanaliloo,

PFA the simulation file.
heating_element.ldev (6.3 MB)

There are a couple of issues I would like to mention:

  1. Once I run the simulation, the temperature of the heating element drops and it is cooler than the boundaries. I figured out that this is due to the presence of a ‘uniform heat’ source, which was disabled. I wonder how it still affected the simulation, but once it is deleted the simulation seems to run fine.

  2. I have some parameters to be swept for the simulation, for example, the current through the heating element. So, I used the ‘sweep’ feature to do this and tried to save the temperature data(T) from the ‘thermal’ results of the ‘HEAT’ simulation. But, I keep getting an error, as T is not a 1D array. Is there any way I can fix this issue.


  1. As I couldn’t save the data using the sweep option I tried to write a script command for saving the temperature array into a variable(struct seemed to be the best) using a ‘for loop’. But I couldn’t do it even that way as I couldn’t assign temperature data for different currents to a single struct variable (but in different branches of the struct variable).

  2. So, next I tried using temperature monitors so I can read out the data from the monitors while I sweep over the parameters. There are two temperature monitors in the file. Both have different sizes and monitor the temperature of different regions. The monitor ‘whole’ monitors the whole simulation region, whereas the monitor ‘waveguide monitor’ monitors only a specific region of the simulation region. So, the temperature data contained in the two monitors must be different. This is correct for the case of the image displayed in the ‘visualizer’ but when I try to export the temperature data both monitors give me the same data with same size. The smaller monitor should contain less data points and hence should be smaller, but I see that both have the same temperature data which does not help while I am trying to get the data only for the specific region. The issue remains even if I delete the ‘whole’ monitor and just keep the ‘waveguide monitor’.

To summarize I have an issue with saving the temperature data while I sweep over some parameters and I have tried several things but each of those had their own issues.

  1. The problem of the simulation diverging when I use a conductivity model for the heating element still persists. For the file attached, I have tried setting the voltage of the boundary condition ‘positive’ to 0.85 V which corresponds to a current of 20 mA through the wire. But the simulation diverges even for such a low current value.

It would be great if you could help me out with these.



Hi @ydgupta

  1. This seems to be a bug. First of all, temperature has to increase for a positive total power, and secondly, when it is disabled, it should not affect the simulations. I will report them for a fix.

  2. I can see concatenation problem which is another bug that our team is working to fix. Can you please elaborate on the error message? Have you tried using pinch function to obtain 1D array?

  3. In this direct we explained how to build matrix dataset:
    Can you please elaborate on the script that you were using and the problem that you had?

  4. I can see this issue too. I will investigate on this further to see if it is another bug or not. If you had time, can you please run charge, DGTD, or FEEM simulations to see if this problem happens in other products?

  5. I deleted the “uniform heat” object and ran the simulations with a bias voltage of 0.85v. Simulations finished running with no issue. I am not sure why you are having diverging issue. What is the version that you are using? Can you please upgrade your product to the latest version and give it another try.



Hey @bkhanaliloo,
Thanks for your reply.

  1. Yeah. The warning I keep getting is regarding the concatenation. I don’t think I can use the pinch function here as this is in the sweep.

  2. I am sweeping over two parameters, length of the element and current through the element. And the result I need is “HEAT::thermal”. The ‘matrix dataset’ in the link attached is useful only if the result is a number and not an array. The ‘getresult’ in the link is useful when there is no sweeping. In my case I want to assign the results from the sweep to a single variable. In other words, I have a 2D array (sweep parameters) and I want to assign each element of that array with MxNx… arrays (results) instead of a number(1x1 array). The dataset ‘struct’ seemed to be the best for my case as I can assign result from each iteration to a new branch in the struct variable. But the problem was naming the branches. For example,
    result= struct;
    for(len= 1:3){
    result.len = getresult(“HEAT::thermal”);
    This would work if the data is saved to the branches ‘result.1’, ‘result.2’, ‘result.3’. But, ‘result.len’ is not read that way and it only overwrites the data in the branch named len (result.len). Is there a way to go about this? It would really help a lot. The ‘sweep’ feature seems to manage 1D arrays but has the concatenation problem if it is other than 1D array.

For the case of the ‘sweep’, I tried using the following script:

result_2 = struct;
result_2.Name = "kappa";
result_2.Result = "::model::HEAT::thermal.T(1)";
addsweepresult("sweep", result_2);

But, I got an error saying that the result “thermal.T(1)” is not valid.


  1. I have not used the other solvers in DEVICE but I never had this problem in using field monitors in MODE. Even with the field monitors I never used the data (only the image displayed) and the data there is not as straightforward as temperature which is just a number. I could identify the issue in DEVICE only because some temperature values were higher than the scale shown on the image.

  2. Downloading the latest version worked. Thanks. I was using the version 7.2.1661 but now upgraded to 7.2.1731.

Durvasa Gupta


Hi @ydgupta

  1. The concatenation problem occurs when the mesh varies between sweep simulations which we were able to resolve it by locking the mesh (right click on HEAT object and select lock mesh). However, it seems that this approach does not work any more. This is under investigation. And you are right, you cannot use pinch function before accessing data. For now, you can set a “for loop” and run sweeps similar to what my colleague did in the post below:
    How to run multiple voltage sweeps in DEVICE when you want to vary the voltages on multiple contacts?

  2. My apologies, for DEVICE simulations, you need to use unstructureddataset. You can use inside the “for loop” to create dataset of interest.
    A way to add indices to the parameters is to use eval script command. You can find useful examples by searching in KX:
    Parameter sweep scripting
    Set Dynamically Named Workspace Variables from Script File Editor

and regarding the error message, it might be because the result should be HEAT::thermal.T.

  1. I was concerned if the problem happens in DEVICE or FEEM. I need to investigate on this further.

  2. Glad to hear that. At least one issue is resolved for now :slight_smile:

Please keep me updated if you had any further questions.