Category: blog

39th ICACC: Day 2

Today I had to get to work myself, unlike the first day of the ICACC where I was only a spectator. At 8h30 I kicked of the GYIF as the first speaker in a session called “Theoretical Modeling and Applications” with my presentation: Computational Materials Science: Where Theory meets Experiment. Intended for a general audience of (expectedly mainly) experimental materials scientist this presentation was aimed to show the audience that computational materials science has in the last decades developed to the level where results relevant for real-life applications in materials science can be obtained. For this I used three examples of my own work: (1) Pt nanowires on Ge(001), where I used simulated STM to build an accurate atomistic model of these wires, (2) doped cerium oxides, where the influence of doping on lattice parameter and thermal expansion coefficients was studied for the purpose of matching them to those of other materials, and (3) Metal-Organic Frameworks, where I showed that the spin-configuration of the MIL-47(V) MOF is linked to the transition pressure inducing breathing.

Later on during the morning, I had the pleasure of chairing the session “Additive Manufacturing” together with Valerie Wiesner from NASA. During this session Mahref Vali and Lisa Rueschoff presented their most recent work on 3D printing of ceramic materials, a technique which will allow the printing of ceramic components in the future. The third speaker of this session, Rumi Kitazawa, delighted us with an inspiring talk on the “Engineering applications of Menger sponges”. A Menger sponge is a fractal related to the Cantor set, as such a fully developed Menger sponge can not be build with any real material, however, using 3D printing it is possible to build a structure with Menger sponge like features (i.e. with holes down to a certain size). By comparing experimental stress tests on such 3D-printed systems with calculations of the strain energy in such a structure, Rumi was able to show these Menger materials have a peculiar, albeit very organised, strain pattern along the main diagonal of the material. The combination of large and small pores present in these Menger sponge materials may make this behavior relevant for MOF (and other porous) materials, where the large pores reflect inter-grain pores, while the small pores are the pores of the MOF. So this is definitely a topic to remember.

Next to presentations, conferences also contain social events. Today, there were two social events; at noon there was a luncheon by the GYIF where the young investigators could mix with people from industry and senior group leaders. In the evening there was the first poster session and booth-stand where companies try to sell their services and lab equipment. Somehow, as a theoretician, I am always a bit at a loss at such events. To draw in more people, there was also a shot-glass contest. No, it was not the goal to drink as much as possible, but to build a protective structure around a shot-glass using only 15 drinking straws (no tape, wire, paper, staples,… allowed). To find the most protective structure, the shot-glass and straw constructions were dropped from various heights. Twenty four teams started at a drop height of 3 feet (~1 m), where already the first shot-glass didn’t survive the drop. Every round, the drop height was increased by 3 feet. For a drop of 20 feet (~6 m) there were only two teams remaining, including our team. Altough our glass survived its first bounce, the second bounce unfortunately broke our glass (darn). Then it was the turn of our remaining competitor, who’s shot-glass exploded into shards on first impact. Officially the result was a draw, although it is clear our construct had clearly the upper hand 😎 .

Our mixed Theoretical-Experimental "international-multi-university" research  team. Left to right: me (UGhent, Belgium), Bert Conings (UHasselt, Belgium), and Chenxin Jin  (Dalhousie University, Canada)  On the right hand side, you can see our construct of straws  around the shot glass.

Our mixed Theoretical-Experimental “international-multi-university” research team. Left to right: me (UGhent, Belgium), Bert Conings (UHasselt, Belgium), and Chenxin Jin (Dalhousie University, Canada)
On the right hand side, you can see our construct of straws around the shot glass.

39th ICACC: Day 1

Today the 39th International Conference  and exposition on Advanced Ceramics and Composites (ICACC) started in Daytona Beach, Florida. Here, scientist from all over the world will be discussing their latest work and findings in the field of ceramic materials during the coming week. Although my project on ceramic materials has been completed for over 2 years now, culminating in a second PhD, I was invited to present my work here. As with many of this kind of conferences, I am afraid that, as a computational materials scientist, I belong to a minority, strongly outnumbered by the experimental (materials) scientists present. This is an aspect that I will need to consider preparing my presentations.

The first morning session consisted of four plenary lectures (general overview presentations in which celebrated group leaders present the overall picture of the work done in their group and their hopes/views on the future). We started of an interesting lecture on “Thermal Barrier Coatings for Gas Turbines” by Prof. David Clarke, where we learned that, since a major part of the world wide energy production is gas based, improving gas-turbine efficiency by only 1% would produce more energy than all renewable production currently in play. This efficiency improvement can be obtained by operating the gas-turbines at higher temperatures. Unfortunately, the metal fans of such a turbine start to degrade if temperatures are too high. By coating them with materials that have a low thermal conductivity, it is possible to operate at the required high temperatures, while the metal fans experience an acceptable operating temperature which is a few hundred degrees lower. Next Prof. Sanjay Mathur from the university of Cologne presented his  groups work on the development of precursor libraries (these ideas are similar as those behind computational high-throughput projects). In precursor chemistry, where changing functional groups or doping leads to changes in the surface morphology, such libraries would then present an interesting tool for designing new materials for energy and health applications. As this apparently is a very hot topic, the fire-alarm of the conference center went into overdrive and everyone needed to be evacuated. When the conference resumed half an hour later Prof. Mathur reassured us he did not intend to fire things up like this. His presentation was followed by that of Prof. Cato Laurencin, who showed us how ceramic materials could be used in a new field he wishes to launch: “Regenerative engineering”. Here, combinations of micro- and nanostructured ceramics are used as matrices to grow and differentiate stem cells intended to heal fractured bones and cartilage. The final presentation by Prof. Kazushige Ohno discussed next generation filters for diesel particulates, which should provide us with a cleaner future.

In the afternoon the parallel symposia started, where I followed the 4th Global Young Investigator Forum (GYIF). Here, Prof. Ricardo Castro presented an interesting method for experimentally obtaining the surface energy of nanoparticles. His quest originated from the simple observation that existing phase diagrams for bulk materials no longer hold when one is working with nano-particles. In such systems, the energy contributions due to the surface of the particle become comparable to those of the inner bulk. Interestingly, one of the example systems Prof. Castro looked into was Mn3+ doped CeO2. In his work he found that the Mn was mainly located at the surface of the CeO2 particles, something I also expected from my own work on aliovalent doped CeO2, based on the defect formation energies of Cu and Co doping. Further presentations discussed Organometal trihalide perovskite solar cells. Although these solar cells still are rather unstable, they do show promise with regard to their efficiency.(The origin of this efficiency is unfortunately not really understood. Maybe other perovskite MOFs are more stable?)

CA: Coders Anonymous

It has been 2 weeks since I last wrote some code, today I started again.

Two weeks ago  I started the, for me, daunting task of upgrading my IDE and compiler to their most recent version. The upgrade itself went smoothly, since it basically consisted of uninstalling the old versions and installing the new ones. The the big finale, recompiling my fortran codebase, went just a little bit less smoothly. It crashed straight into a compiler-bug, nicely introduced in version 4.9 of the gcc fortran compiler, and carefully nurtured up to version 4.10 I had just installed. The bug sounds as follows:

error: internal compiler error: in gfc_conv_descriptor_data_get, at fortran/trans-array.c:145
end module TPeriodicTableModule

Clear sounding as it is, it required some further investigation to find out what was actually the problem and if and how it can be resolved. The problem appeared to be a rather simple one; The compiler seems to be unable to generate the finalization code for some object based constructions involving both fixed size and allocatable arrays, the strong suite of the fortran language.  A minimal example allowing you to bump into this compiler bug goes as follows:

 

Bug 59765   
  1. module bug59765
  2. type TSubObject
  3. integer, dimension(:), allocatable :: c
  4. end type TSubObject
  5. type TObject
  6. type(TSubObject), dimension(1) :: u
  7. end type TObject
  8. contains
  9.  
  10. subroutine add(s)
  11. class(TObject), intent(inout) :: s
  12. end subroutine add
  13.  
  14. end module bug59765

 

The issue arises when the compiler tries to setup the deallocation of the allocatable array of the TSubObject elements of the array u. Apparently the combination of the static array u and allocatable arrays c in the elements of u result in confusion. It was suggested that the compiler wants to perform the deallocation procedure as an array operation (one of the neat tricks fortran has up its sleeves):

deallocate(s%u(:)%c)

instead it should just use a normal do-loop and run over all elements of u.

One of the main ironies of this story is that this bug is strongly connected to object oriented programming, a rather new concept in the world of fortran. Although introduced in fortran 2003, more than 10 year ago, compiler support for these features have only reached basic maturity in recent years. The problem we are facing is one in the destructor of an object: the smart compiler wants to make our life easy, and implicitly create a good destructor for us. As with most smart solutions of modern day life, such things have a tendency to fail when you least expect it.

However, this bug (and the fact that it persists in more recent versions of the compiler) forces us to employ good coding practices: write a destructor yourself. Where C++ has implemented keywords for both constructor and destructor, the fortran programmer, as yet, only has a keyword for a destructor: final. This finalization concept was introduced in the fortran 2003 standard as part of the introduction of the Object Oriented Programming paradigm. A final procedure/function also works slightly different than what you may be used to in for example C++, namely, it is not directly callable by the programmer as an object-function/procedure. A final procedure/function is only called upon in an automatic way when an object is destroyed. So for those of us who also implement  ‘free()‘ procedures to clean-up objects at runtime, this means some extra work may be needed (I haven’t checked this in detail).

So how is our example-problem healed from bug 59765? Through the introduction of our own destructor.

  1. module fixbug59765
  2. type TSubObject
  3. integer, dimension(:), allocatable :: c
  4. contains
  5. final :: destroy_TSubObject
  6. end type TSubObject
  7. type TObject
  8. type(TSubObject), dimension(1) :: u
  9. end type TObject
  10. contains
  11.  
  12. subroutine add(s)
  13. class(TObject), intent(inout) :: s
  14. end subroutine add
  15.  
  16. subroutine destroy_TSubObject(this)
  17. type(TSubObject) :: this !note: this needs to be a type not a class
  18.  
  19. if (allocated(this%c)) deallocate(this%c)
  20. end subroutine destroy_TSubObject
  21.  
  22. end module fixbug59765

In my own code, both the TSubObject and TObject classes got their own final procedure, due to the slightly higher complexity of the objects involved. The resulting code compiled without further complaints, and what is more, it also still compiled with the recent intel ifort compiler. Unfortunately, final procedures are only included in the gcc compiler since version 4.9, making code containing them incompatible with the gcc version 4.8 and earlier.

First light

Happy 2015!

A new year goes hand in hand with new beginnings and resolutions for the coming year. For me, the new beginning is this new version of my personal webpage, and the resolution is my intent to launch this blog.

As you may have read on the frontpage of this website; I am a computational scientist with a background in both physics and chemistry. In addition, to being spread out between physics and chemistry, and between theory and experiment, I am also spread out in the real space we all live in, since I am always traveling between work and family. This lack of clear position in life and research makes me feel a bit like a delocalized particle: I am a delocalized Physicist.

On this blog you will be able to read:

  • What the life of such a delocalized physicist looks like (or a modern academic).
  • About scientific programming and computational science.
  • About the physics of/in nature.