An error occurred while processing the template.
The following has evaluated to null or missing:
==> .vars['reserved-article-group-id']  [in template "161555#161602#ARTICLE-PAGE---HERO" at line 14, column 20]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign groupId = .vars["reserved-art...  [in template "161555#161602#ARTICLE-PAGE---HERO" at line 14, column 1]
----
1<#assign namespace = randomNamespace /> 
2<#assign JSONFactoryUtil = staticUtil["com.liferay.portal.kernel.json.JSONFactoryUtil"] /> 
3<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4<#assign containerId = randomNamespace /> 
5<#assign shareURL = themeDisplay.getPortalURL()+themeDisplay.getURLCurrent()/> 
6 
7<#-- Auto-assign ALL category to every article --> 
8<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
9<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
10<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
11  
12<#-- Get current JournalArticle --> 
13<#assign articleId = .vars['reserved-article-id'].data /> 
14<#assign groupId = .vars['reserved-article-group-id'].data?number /> 
15<#assign journalArticle = journalArticleLocalService.getArticle(groupId, articleId) /> 
16  
17<#-- Get AssetEntry for this article --> 
18<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) /> 
19  
20<#-- Your ALL category ID --> 
21<#assign allCategoryId = 4614994 /> 
22  
23<#-- Assign ALL category if not already set --> 
24<#if !assetEntry.getCategories()?seq_contains(assetCategoryLocalService.getCategory(allCategoryId))> 
25    <#assign categoryIds = assetEntry.getCategoryIds() + [allCategoryId] /> 
26    ${assetEntryLocalService.updateEntry( 
27        assetEntry.getUserId(), 
28        assetEntry.getGroupId(), 
29        assetEntry.getClassName(), 
30        assetEntry.getClassPK(), 
31        assetEntry.getUuid(), 
32        assetEntry.getClassTypeId(), 
33        categoryIds, 
34        assetEntry.getTagNames() 
35    )} 
36</#if> 
37 
38<div class="hero jmarticle__hero-main-container"> 
39    <div class="container"> 
40        <div class="row"> 
41            <div class="article__cont"> 
42                <h1 class="article__heading">${Title.getData()}</h1> 
43                <#if (SubTitle.getData())??> 
44                    <p class="article__para"> 
45                        ${SubTitle.getData()} 
46                    </p> 
47                </#if> 
48 
49                <#assign Date_Data=getterUtil.getString(Date.getData())> 
50                <#if validator.isNotNull(Date_Data)> 
51                    <p class="article__date"> 
52                        <#assign Date_DateObj=dateUtil.parseDate("yyyy-MM-dd", Date_Data, locale)> 
53                        ${dateUtil.getDate(Date_DateObj, "dd MMMM yyyy", locale)} 
54                    </p> 
55                </#if> 
56 
57                <#if Link_Title?? && Link_Title.getData()?has_content> 
58                    <#list Link_Title.getSiblings() as cur_Link_Title> 
59						<#if cur_Link_Title?? && cur_Link_Title.getData()?has_content> 
60							<#assign linkHref="#" /> 
61							<#assign target="" /> 
62							 
63							<#assign rowId = containerId + cur_Link_Title?index /> 
64							<#if cur_Link_Title.Link_Internal?? && cur_Link_Title.Link_Internal.getFriendlyUrl()?has_content> 
65								<#assign linkHref=cur_Link_Title.Link_Internal.getFriendlyUrl() /> 
66							<#elseif cur_Link_Title.Link_Media?? && cur_Link_Title.Link_Media.getData()?has_content> 
67								<#assign linkHref=cur_Link_Title.Link_Media.getData() /> 
68							<#elseif cur_Link_Title.Link_Mailto?? && cur_Link_Title.Link_Mailto.getData()?has_content> 
69								<#assign linkHref="mailto:" + cur_Link_Title.Link_Mailto.getData() /> 
70							<#elseif cur_Link_Title.Link_External?? && cur_Link_Title.Link_External.getData()?has_content> 
71								<#assign linkHref=cur_Link_Title.Link_External.getData() /> 
72							</#if> 
73							<#if (cur_Link_Title.Link_Target??) && (cur_Link_Title.Link_Target.getData())?has_content> 
74								<#assign target=cur_Link_Title.Link_Target.getData() /> 
75							</#if> 
76							<div id="blue_button_click_div" data-analytics-asset-type="custom"> 
77								<div class="jmarticle__hero-btn-list"> 
78									<a id="panel_blue_button_${rowId}" class="article__btn" href="${linkHref}" title="${cur_Link_Title.getData()}" target="${target}" data-analytics-asset-action="click" onclick="onBlueButtonClick(this)" > 
79										<span class="btn__text">${cur_Link_Title.getData()}</span> 
80										<span class="arrow__forward"></span> 
81									</a> 
82								</div> 
83							</div> 
84						</#if> 
85					</#list> 
86                </#if> 
87				  <div class="article-download-share"> 
88                
89                    <#if PDFTitle?? && PDFTitle.getData()?has_content> 
90                        <#assign title = PDFTitle.getData() /> 
91                        <#assign pdf_link = "#" /> 
92                        <#assign pdfrowId = containerId /> 
93                        <#if PDFTitle.PDF?? && PDFTitle.PDF.getData()?has_content> 
94                            <#assign pdf_link = PDFTitle.PDF.getData() /> 
95                        </#if> 
96                        <div class="article-download"> 
97                            <div id="blue_button_click_div" data-analytics-asset-type="custom"> 
98                                <div class="jmarticle__hero-btn-list"> 
99                                    <a id="panel_blue_button_${pdfrowId}" class="article__btn" href="${pdf_link}" title="${title}" data-analytics-asset-action="click" onclick="onBlueButtonClick(this)"> 
100                                        <span class="btn__text">${title}</span> 
101                                        <span class="arrow__forward"></span> 
102                                    </a> 
103                                   <a id="panel_blue_button_${pdfrowId}" class="article__btn-mobile" href="${pdf_link}"             title="${title}" data-analytics-asset-action="click" onclick="onBlueButtonClick(this)"> 
104                                       <img src="${themeDisplay.getPathThemeImages()}/new__jm__images/download-white-icon.svg" alt="twitter image"/> 
105                                    </a> 
106                                </div> 
107                            </div> 
108                        </div> 
109                    </#if> 
110                                 
111                </div> 
112                 
113            </div> 
114        </div> 
115       <#if (ImageLarge.getData())?? && ImageLarge.getData() != ""> 
116            <div class="row jmarticle__hero-banner" id="jmarticle__hero-${namespace}"  
117            style="background-image: url(${ImageLarge.getData()})"> 
118        </#if> 
119 
120        </div> 
121    </div> 
122</div> 
123 
124<#if Author?? && Author.getData()?has_content> 
125    <div class="jmarticle__author-info"> 
126        <div class="container"> 
127            <div class="hero__bar"> 
128                     <#list Author.getSiblings() as cur_Author> 
129                            <#if cur_Author?? && cur_Author.getData()?has_content> 
130                                <#assign 
131                                    webContentData = jsonFactoryUtil.createJSONObject(cur_Author.getData()) 
132                                    gId = groupId 
133                                    journalArticle = journalArticleLocalService.getArticleByUrlTitle(gId, webContentData.title) 
134                                    docXML = saxReaderUtil.read(journalArticle.getContent()) 
135 
136                                    fName = docXML.valueOf("//dynamic-element[@name='FullName']/dynamic-content/text()") 
137                                    jobTitle = docXML.valueOf("//dynamic-element[@name='JobTitle']/dynamic-content/text()") 
138                                    role = docXML.valueOf("//dynamic-element[@name='ContactInfo']/dynamic-content/text()") 
139                                    photoXML = docXML.valueOf("//dynamic-element[@name='Photo']/dynamic-content/text()") 
140                                    photoSrc = JSONFactoryUtil.createJSONObject(photoXML).getString("uuid") 
141                                    fullName = docXML.valueOf("//dynamic-element[@name='Title']/dynamic-content/text()") 
142                                    authorImageXML = docXML.valueOf("//dynamic-element[@name='ImageLarge']/dynamic-content/text()") 
143                                    authImageSrc = JSONFactoryUtil.createJSONObject(authorImageXML).getString("uuid") 
144                                    summary = docXML.valueOf("//dynamic-element[@name='Summary']/dynamic-content/text()") 
145                                /> 
146 
147                                    <div class="author"> 
148                                        <figure class="author__image"> 
149                                            <#if authImageSrc?? && authImageSrc?has_content> 
150                                                <img src="/documents/${groupId}/${authImageSrc}" alt="${fullName}" class="author_img_class_new"> 
151                                            <#elseif photoSrc?? && photoSrc?has_content> 
152                                                <img src="/documents/${groupId}/${photoSrc}" alt="${fName}" class="author_img_class_new"> 
153                                            </#if> 
154                                        </figure> 
155                                        <div class="author__details d-flex flex-column"> 
156                                            <h3 class="author__name"> 
157                                                <a rel="author"> 
158                                                    <#if fullName?? && fullName?has_content> 
159                                                        ${fullName} 
160                                                    <#elseif fName?? && fName?has_content> 
161                                                        ${fName} 
162                                                    </#if> 
163                                                </a> 
164                                            </h3> 
165                                            <p class="author__desc text-size-a author_job_title"> 
166                                                <#if jobTitle?? && jobTitle?has_content> 
167                                                    ${jobTitle} 
168                                                </#if> 
169                                            </p> 
170                                            <span> 
171                                                <p class="author__desc text-size-a"> 
172                                                    <#if summary?? && summary?has_content> 
173                                                        ${summary} 
174                                                    </#if> 
175                                                    <#if role?? && role?has_content> 
176                                                        ${role} 
177                                                    </#if> 
178                                                </p> 
179                                            </span> 
180                                        </div> 
181                                        <div> 
182                                            <div class="author__contact"> 
183                                                <ul class="author__contact-list"> 
184                                                </ul> 
185                                            </div> 
186                                        </div> 
187                                    </div> 
188                             </#if> 
189                     </#list> 
190            </div> 
191    	</div> 
192    </div> 
193</#if> 
194 
195 
196 
197<div class="container"> 
198    <div class="row"> 
199        <div class="article__intro"> 
200            <#if (Introduction.getData())??> 
201            	${Introduction.getData()} 
202            </#if> 
203 
204           <div class="article-download-share"> 
205                
206                    <#if PDFTitle?? && PDFTitle.getData()?has_content> 
207                        <#assign title = PDFTitle.getData() /> 
208                        <#assign pdf_link = "#" /> 
209                        <#assign pdfrowId = containerId /> 
210                        <#if PDFTitle.PDF?? && PDFTitle.PDF.getData()?has_content> 
211                            <#assign pdf_link = PDFTitle.PDF.getData() /> 
212                        </#if> 
213                        <div class="article-download"> 
214                            <div id="blue_button_click_div" data-analytics-asset-type="custom"> 
215                                <div class="jmarticle__hero-btn-list"> 
216                                    <a id="panel_blue_button_${pdfrowId}" class="article__btn" href="${pdf_link}" title="${title}" data-analytics-asset-action="click" onclick="onBlueButtonClick(this)"> 
217                                        <span class="btn__text">${title}</span> 
218                                        <span class="arrow__forward"></span> 
219                                    </a> 
220                                   <a id="panel_blue_button_${pdfrowId}" class="article__btn-mobile" href="${pdf_link}"             title="${title}" data-analytics-asset-action="click" onclick="onBlueButtonClick(this)"> 
221                                       <img src="${themeDisplay.getPathThemeImages()}/new__jm__images/download-white-icon.svg" alt="twitter image"/> 
222                                    </a> 
223                                </div> 
224                            </div> 
225                        </div> 
226                    </#if>               
227                
228                   
229               <div class="article-share"> 
230                   <a href="https://linkedin.com/shareArticle?url=${shareURL}&title=<#if (Title.getData())??>${Title.getData()}</#if>" target="_blank"> 
231                       <img class="socialicons__img" src="${themeDisplay.getPathThemeImages()}/new__jm__images/social_icons-LinkedIN.png" alt="twitter image"/> 
232                    </a> 
233                      <a  href="https://twitter.com/share?url=${shareURL}&text=<#if (Title.getData())??>${Title.getData()}</#if>" target="_blank"> 
234                       <img class="socialicons__img" src="${themeDisplay.getPathThemeImages()}/new__jm__images/social_icons-Twitter.png" alt="twitter image"/> 
235                    </a> 
236                </div> 
237            </div> 
238       
239        </div> 
240    </div> 
241</div> 
242 
243<style> 
244    img.author_img_class_new { 
245        width: 100% !important; 
246        height: 100% !important; 
247        position: absolute; 
248        margin: auto; 
249        top: 0; 
250        bottom: 0; 
251
252     
253    .article__btn:focus-visible { 
254    outline: 2px solid blue !important; 
255
256 
257@media (min-width: 320px) and (max-width: 650px) { 
258	.article__intro li { 
259	   margin-left: -32px !important;		 
260
261	.journal-content-article .container .article__intro { 
262    margin-top: 22px !important; 
263
264
265@media (min-width: 540px) and (max-width: 834px) { 
266    .article__intro li { 
267	      margin-left: -32px !important;		 
268
269    .article__intro { 
270        margin: 60px 15px 0 5px !important;         
271
272
273  
274@media (min-width: 320px) and (max-width: 539px){ 
275.jmarticle__author-info { 
276    padding: 0px 0; 
277
278.jmarticle__author-info .author__image { 
279    width: 39px; 
280    height: 40px; 
281
282 
283.jmarticle__author-info .author__name a { 
284    line-height: 0px; 
285    font-size: 18px !important; 
286    margin-right: 10px; 
287
288 
289.jmarticle__author-info .author__desc { 
290     
291    line-height: 14px; 
292    font-size: 12px !important; 
293    margin-bottom: 7px; 
294
295
296  
297</style> 

Hydrogen today is predominantly made by conventional steam methane reforming (SMR) of natural gas. The Hydrogen Council estimates the amount of hydrogen currently used globally to be eight exajoules (equivalent to 2200 TWh). This is used primarily in refineries and for ammonia and methanol production. With a growing population, and as refineries need additional hydrogen to upgrade heavier oil, this requirement is only expected to increase.

In the future it's likely that we'll need to massively increase the amount of hydrogen produced. It's now understood that to reduce the impact of climate change we must dramatically reduce CO2 emissions in every aspect of life. Transitioning to low carbon energy can happen in a number of ways and a low carbon gas option is critical in providing a robust, resilient system. It is also low cost and flexible. Of all the possible routes to decarbonised gas, hydrogen has the potential to have a game changing impact on climate change.

But if hydrogen is to play a role in reducing the impact of climate change, it will need to have substantially lower CO2 emissions than current manufacturing processes. For hydrogen to be made from natural gas, it needs to be combined with carbon capture and storage (CCS). Conventionally this process would use steam methane reforming combined with CCS; but this process captures the CO2 from fluegas, which is at low concentration and pressure and therefore has a high capital requirement. This can double the overall cost of the plant. It is therefore more cost effective to capture the CO2 at process pressure using well proven capture technology.

The main difference between our LCH solution, which has a gas heated reformer/autothermal reformer at its core, and the conventional route to hydrogen using steam methane reforming is that the energy to drive the reaction is provided by introducing oxygen to the reactor rather than burning fuel in gas burners.

The advantages of our LC solution are: 

  • The LCH flowsheet is more energy efficient than a steam methane reforming flowsheet.
  • The reforming reaction is conducted at a higher temperature which means more methane is converted to hydrogen. 
  • Finally, and probably most importantly, the vast majority of CO2 produced during the various reactions is contained within the process and can be captured at more than 95% than using existing technology.


This month (November 2018), JM received a grant from UK Department of Business, Energy and Industrial Strategy (BEIS). This is to develop our understanding of the costs and performance for our proposed LCH solution under the Energy Entrepreneurs Fund Wave 6. The Energy Entrepreneurs Fund is a competitive funding scheme to support the development of technologies, products and processes in energy efficiency, power generation and storage. 

The information generated will inform BEIS on the potential for cost effective clean hydrogen production at large scale as part of their wider ambitions within the Clean Growth Plan. With ambitious policy over the next few years, the UK can continue to move towards fulfilling its obligations under the Climate Change Act.

 

Read more

Supporting the hydrogen economy

How fuel cell technologies can shape the UK's future

Explore