CINXE.COM

Projects, Facilities, and Construction - Technical Discipline - SPE

<!doctype html> <html class="no-js" lang=""> <head> <title>Projects, Facilities, and Construction - Technical Discipline - SPE</title> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="title" content="Projects, Facilities, and Construction - Technical Discipline - SPE"/> <meta name="description" content="SPE&#x27;s Projects, Facilities, and Construction discipline covers processing, flow assurance and subsea systems, measurement and control, platforms and more."/> <meta name="apple-mobile-web-app-title" content="Projects, Facilities, and Construction - Technical Discipline - SPE"> <!-- ANALYTICS SCRIPTS --> <!-- Google Tag Manager Script --> <script> window.dataLayer = window.dataLayer || []; window.dataLayer.push({"content": {"category": "disciplines"}}); (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({'gtm.start': new Date().getTime(), event: 'gtm.js'}); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-T8JL43'); </script> <!-- END Google Tag Manager --> <!-- Marketo Muchkin Script --> <script type="text/javascript"> (function() { var didInit = false; function initMunchkin() { if(didInit === false) { didInit = true; Munchkin.init('833-LLT-087'); } } var mkto_script = document.createElement('script'); mkto_script.type = 'text/javascript'; mkto_script.async = true; mkto_script.src = '//munchkin.marketo.net/munchkin.js'; mkto_script.onreadystatechange = function() { if (this.readyState == 'complete' || this.readyState == 'loaded') { initMunchkin(); } }; mkto_script.onload = initMunchkin; document.getElementsByTagName('head')[0].appendChild(mkto_script); })(); </script> <!-- END Marketo Muchkin Script --> <!-- Marketo RTP tag --> <script type='text/javascript'> (function(c,h,a,f,i,e){c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; c[a].a=i;c[a].e=e;var g=h.createElement("script");g.async=true;g.type="text/javascript"; g.src=f+'?aid='+i;var b=h.getElementsByTagName("script")[0];b.parentNode.insertBefore(g,b); })(window,document,"rtp","//sjrtp4-cdn.marketo.com/rtp-api/v1/rtp.js","spe"); rtp('send','view'); rtp('get', 'campaign',true); </script> <!-- END Marketo RTP tag --> <!--Css--> <!-- GLOBAL STYLING FOR ALL PAGES --> <style> blockquote { padding: .5rem 1rem; border-left: .25rem solid #eceeef; } .zoom { transition: transform .2s; } .zoom:hover { -ms-transform: scale(1.2); /* IE 9 */ -webkit-transform: scale(1.2); /* Safari 3-8 */ transform: scale(1.2); } </style> <!-- CSS BEGIN --> <!-- fontawesome icons --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://kit.fontawesome.com/9cbc9abb19.css" crossorigin="anonymous"> <!-- Bootstrap 4 --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous"> <!-- JQuery **DEPRECATED (moved to js where it belongs!) --> <!-- scroller is deprecated as well --> <!-- CSS END --> <link rel="stylesheet" type="text/css" href="/static/css/spe/v1/stylesheet.css"> <link rel="stylesheet" href="/static/js/spe_scroller_jquery.css" integrity="sha384-juWNVEQZ4R0g8fb7EbjVR1vTBSa33iiBazKbFD4OJ3EfMKSse0jLNit6ZSRwdBfp" crossorigin="anonymous"/> <!--/.Css--> <!-- GLOBAL JS FOR ALL PAGES (loaded in head tag) --> <!-- Start GPT Tag --> <script async src='https://securepubads.g.doubleclick.net/tag/js/gpt.js'></script> <script> window.googletag = window.googletag || {cmd: []}; googletag.cmd.push(function() { var mapping1 = googletag.sizeMapping() .addSize([700, 200], [[160, 600]]) .addSize([0, 0], [[0, 0]]) .build(); googletag.defineSlot('/57789820/SPE_ORG_160x600', [[160,600]], 'div-gpt-ad-6795482-1') .defineSizeMapping(mapping1) .addService(googletag.pubads()); googletag.pubads().collapseEmptyDivs(); googletag.pubads().setCentering(true); googletag.enableServices(); }); </script> <!-- End GPT Tag --> </head> <body> <!-- Google Tag Manager Script --> <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-T8JL43" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- END Google Tag Manager --> <!--Header--> <div id="navbar-page-wrapper"> <!-- Ending </div> is at the bottom of the page --> <!-- *********************** --> <!-- BEGIN PAGE-HEADER BLOCK --> <div class="spe-shadow-bottom navbar__page-header-container"> <!--Main Navigation--> <header id="page-header"> <!-- SPE HEADER BAR --> <div id="spe-header" class="row m-0 navbar__spe-header"> <div id="menublock" class="col-12 col-md p-0"> <!-- ******** --> <!-- DROPDOWN NAV --> <nav id="navbar-sticky-bar" class="navbar navbar-expand-lg bg-white p-0 p-lg-0 navbar__mainnav"> <!-- Container wrapper --> <div class="w-100 navbar__container-wrapper"> <!-- Toggle button --> <div class="d-flex d-lg-none flex-row py-2 px-4 p-lg-0 navbar__mobile-menu-wrapper"> <div class="col py-1 px-0 d-block text-left navbar__logo-box-blue"> <a href="/en/"><img src="/static/www/img/spe_vert_white.svg" width="280" height="150" alt="SPE Logo" class="spelogoblue img-fluid"></a> </div> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".topcollapse" aria-controls=".topcollapse" aria-expanded="false" aria-label="Toggle navigation"> <i class="fa-solid fa-bars fa-2xl" style="color: #ffffff;"></i> </button> </div> <!-- Begin Collapsible Wrapper --> <div class="topcollapse collapse navbar-collapse flex-wrap"> <!-- Logo Bar Wrapper --> <div class="container-fluid p-0"> <div class="row w-100 m-0"> <div class="col-auto py-1 px-3 d-none d-lg-flex text-left align-items-start justify-content-center navbar__logo-box-blue"> <a href="/en/"><img src="/static/www/img/spe_vert_blue.svg" width="280" height="150" alt="SPE Logo" class="spelogomain img-fluid"></a> </div> <div class="col p-0"> <!-- SPE LOGIN TOP BAR --> <div id="loginbar" class="container-fluid navbar__loginbar"> <div class="container-fluid p-0"> <nav id="global-nav" class="row w-100 m-0 navbar__global-nav"> <div class="col-4 py-1 px-0 d-none d-lg-none text-left navbar__logo-box-blue"> <a href="/en/"><img src="/static/www/img/spe_vert_white.svg" width="280" height="150" alt="SPE Logo" class="spelogoblue img-fluid"></a> </div> <div class="col-12 col-lg-12 nav ml-lg-auto pr-0 align-items-start align-items-lg-center flex-column flex-lg-row flex-nowrap"> <div class="col py-1 pl-2 pl-lg-0 pr-3 text-right my-lg-1 align-content-center w-100"> <script async src="https://cse.google.com/cse.js?cx=007919311804914109615:_7f3pu6glfg"></script> <div class="input-group ml-auto navbar__search-box-wrapper"> <div id="navbarSearch" class="gcse-search"></div> </div> </div> <div class="col-12 col-lg-auto px-0 py-3 py-lg-0 d-flex flex-row flex-wrap"> <ul class="d-flex flex-row pl-3 pl-lg-0 list-unstyled m-0"> <li class="nav-item"><a href="/en/about/" class="nav-link">About</a></li> <li class="nav-item"><a href="/en/contact/" class="nav-link">Contact</a></li> <li class="nav-item" id="global-nav-join"><a href="/en/join/" class="nav-link" id="global-nav-join-link">Join</a></li> </ul> <ul class="nav pr-3 pr-lg-0 ml-auto ml-lg-0 align-items-start"> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false"><span id="header-welcome-msg" class="pr-3">Guest</span><i class="fas fa-user"></i></a> <div class="dropdown-menu dropdown-menu-right"> <a class="dropdown-item sso-authenticated-only" href="https://www.spe.org/member/access/MyAccount">Profile</a> <a class="dropdown-item sso-authenticated-only" href="/en/preferences/email_preferences/">Preferences</a> <div class="dropdown-divider"></div> <a href="https://www.spe.org/sso/protected_login.html?redirect_target=https%3A//www.spe.org/en/" id="global_login" class="dropdown-item"><i class="fas fa-user"></i><span id="header-login-label"> Sign In</span></a> </div> </li> </ul> </div> </div> </nav> </div> </div> <!-- SPE LOGIN TOP BAR --> <!-- Begin Menu Bar Links --> <div class="d-flex w-100 justify-content-start justify-content-lg-start align-items-center position-relative"> <div id="navbarMenuWrapper" class="p-3 p-lg-0 navbar__menu-wrapper"> <ul class="navbar-nav mr-auto pl-lg-0"> <!-- Begin Membership Menu --> <li class="nav-item dropdown position-static d-lg-flex align-items-lg-center navbar__dropdown-hover"> <!-- Dropdown menu without clickable URL (mobile, tables, etc.) --> <a class="nav-link dropdown-toggle text-wrap text-center my-2 navbar__nav-link--text navbar__no-click-menu-button" href="#" id="navbar-dropdown-1" role="button" data-toggle="dropdown" aria-expanded="false"> Membership </a> <!-- Clickable URL menu with hover over dropdown --> <a class="nav-link dropdown-toggle text-wrap text-center my-2 navbar__nav-link--text navbar__clickable-menu-button" href="/en/members/" id="navbar-dropdown-1" role="button" aria-expanded="false"> Membership </a> <!-- Dropdown menu --> <div class="dropdown-menu w-100 top-100 mt-0 navbar__dropdown-menu navbar__wide-menu--membership" aria-labelledby="navbar-dropdown-1"> <div class="container navbar__dropdown-container"> <div class="row mt-2"> <div class="col-md-12 col-lg-6 mb-3 mb-md-3 pl-xl-4 order-2 order-lg-1 navbar__image-column"> <div class="pt-2"> <a href="/en/members/" class="text-body text-decoration-none navbar__image-column--link"> <p class="text-decoration-none navbar__image-column--title"> Maximize Your Membership </p> <div class="mb-4 navbar__image-container"> <img src="https://spe.widen.net/content/jiyj1yzfkm/png/SPE.org%20Navigation%20-%20Membership.png?crop=false&w=400&position=c&color=ffffffff&quality=80&u=aggjty" class="rounded img-fluid" alt="Maximize Your Membership" /> </div> <p class="text-decoration-none"> Explore the full SPE experience and make the most out of your membership. </p> <button type="button" class="btn font-weight-bold">Learn More</button> </a> </div> </div> <div class="col-md-12 col-lg-6 mb-3 mb-md-3 pl-xl-2 pr-xl-4 pt-md-3 order-1 order-lg-2"> <div class="list-group list-group-flush"> <a href="/en/members/" class="list-group-item list-group-item-action">Professional Membership</a> <a href="/en/students/" class="list-group-item list-group-item-action">Student Membership</a> <a href="/en/members/benefits/" class="list-group-item list-group-item-action">Benefits</a> <a href="/en/about/regions/" class="list-group-item list-group-item-action">Regions</a> <a href="/en/disciplines/" class="list-group-item list-group-item-action">Disciplines</a> <a href="/en/join/" class="list-group-item list-group-item-action">Join</a> <a href="/en/join/renew/" class="list-group-item list-group-item-action">Renew</a> </div> </div> </div> </div> </div> </li> <!-- End Membership Menu --> <!-- Begin Events Menu --> <li class="nav-item dropdown position-static d-lg-flex align-items-lg-center navbar__dropdown-hover"> <!-- Dropdown menu without clickable URL (mobile, tables, etc.) --> <a class="nav-link dropdown-toggle text-wrap text-center my-2 navbar__nav-link--text navbar__no-click-menu-button" href="#" id="navbar-dropdown-2" role="button" data-toggle="dropdown" aria-expanded="false"> Events </a> <!-- Clickable URL menu with hover over dropdown --> <a class="nav-link dropdown-toggle text-wrap text-center my-2 navbar__nav-link--text navbar__clickable-menu-button" href="/en/events/about-events/" id="navbar-dropdown-2" role="button" aria-expanded="false"> Events </a> <!-- Dropdown menu --> <div class="dropdown-menu w-100 top-100 mt-0 navbar__dropdown-menu navbar__wide-menu--events" aria-labelledby="navbar-dropdown-2"> <div class="container navbar__dropdown-container"> <div class="row mt-2 navbar__dropdown-row"> <div class="col-md-12 col-lg-6 mb-3 mb-md-3 pl-xl-4 order-2 order-lg-1 navbar__image-column"> <div class="pt-2"> <a href="/en/events/about-events/" class="text-body text-decoration-none navbar__image-column--link"> <p class="text-decoration-none navbar__image-column--title"> Explore SPE Events </p> <div class="mb-4 navbar__image-container"> <img src="https://spe.widen.net/content/uldicwndzj/jpeg/2%20Navigation.jpeg?w=400&position=c&color=ffffffff&quality=80&u=aggjty" class="rounded img-fluid" alt="Explore SPE Events" /> </div> <p class="text-decoration-none"> Discover SPE events tailored to your region and interests. </p> <button type="button" class="btn font-weight-bold">Learn More</button> </a> </div> </div> <div class="col-md-12 col-lg-6 mb-3 mb-md-3 pl-xl-2 pr-xl-4 pt-md-3 order-1 order-lg-2"> <div class="list-group list-group-flush"> <a href="https://www.atce.org/" target="_blank" rel="noopener" class="list-group-item list-group-item-action">ATCE</a> <a href="/en/events/calendar/" class="list-group-item list-group-item-action">Events Calendar</a> <a href="/en/events/papers/" class="list-group-item list-group-item-action">Call for Papers</a> <a href="/en/sales/events/" class="list-group-item list-group-item-action">Sponsor and Exhibit</a> <a href="https://onepetro.org/conferences" target="_blank" rel="noopener" class="list-group-item list-group-item-action">Proceedings</a> </div> </div> </div> </div> </div> </li> <!-- End Events Menu --> <!-- Begin Publications and Insights Menu --> <li class="nav-item dropdown position-static d-lg-flex align-items-lg-center navbar__dropdown-hover"> <!-- Dropdown menu without clickable URL (mobile, tables, etc.) --> <a class="nav-link dropdown-toggle text-wrap text-center my-2 navbar__nav-link--text navbar__largetext navbar__no-click-menu-button" href="#" id="navbar-dropdown-3" role="button" data-toggle="dropdown" aria-expanded="false"> Publications and Insights </a> <!-- Clickable URL menu with hover over dropdown --> <a class="nav-link dropdown-toggle text-wrap text-center my-2 navbar__nav-link--text navbar__largetext navbar__clickable-menu-button" href="/en/publications-and-insights/" id="navbar-dropdown-3" role="button" aria-expanded="false"> Publications and Insights </a> <!-- Dropdown menu --> <div class="dropdown-menu w-100 top-100 mt-0 navbar__dropdown-menu navbar__wide-menu--publications" aria-labelledby="navbar-dropdown-3"> <div class="container navbar__dropdown-container"> <div class="row mt-2"> <div class="col-md-12 col-lg-6 mb-3 mb-md-3 pl-xl-4 order-2 order-lg-1 navbar__image-column"> <div class="pt-2"> <a href="/en/publications-and-insights/" class="text-body text-decoration-none navbar__image-column--link"> <p class="text-decoration-none navbar__image-column--title"> Innovate with Insights </p> <div class="mb-4 navbar__image-container"> <img src="https://spe.widen.net/content/4nqduytumr/jpeg/4%20Navigation.jpeg?w=400&position=c&color=ffffffff&quality=80&u=aggjty" class="rounded img-fluid" alt="Innovate with Insights" /> </div> <p class="text-decoration-none"> Access a range of content designed to drive the energy industry forward. </p> <button type="button" class="btn font-weight-bold">Learn More</button> </a> </div> </div> <div class="col-md-12 col-lg-6 mb-3 mb-md-3 pl-xl-2 pr-xl-4 pt-md-3 order-1 order-lg-2"> <div class="list-group list-group-flush"> <a href="https://jpt.spe.org/" target="_blank" rel="noopener" class="list-group-item list-group-item-action">JPT</a> <a href="https://onepetro.org/" target="_blank" rel="noopener" class="list-group-item list-group-item-action">OnePetro</a> <a href="https://streaming.spe.org/" target="_blank" rel="noopener" class="list-group-item list-group-item-action">Energy Stream</a> <a href="/en/publications/spe-journal/" target="_blank" rel="noopener" class="list-group-item list-group-item-action">SPE Journal</a> <a href="/en/industry/reserves/" class="list-group-item list-group-item-action">PRMS</a> <a href="/en/industry/co2-storage-resources-management-system/" class="list-group-item list-group-item-action">SRMS</a> <a href="https://search.spe.org/i2kweb/SPE/search" target="_blank" rel="noopener" class="list-group-item list-group-item-action">Research Portal</a> <a href="/en/authors/" class="list-group-item list-group-item-action">Become an SPE Author</a> </div> </div> </div> </div> </div> </li> <!-- End Publications and Insights Menu --> <!-- Begin Professional Development Menu --> <li class="nav-item dropdown position-static d-lg-flex align-items-lg-center navbar__dropdown-hover"> <!-- Dropdown menu without clickable URL (mobile, tables, etc.) --> <a class="nav-link dropdown-toggle text-wrap text-center my-2 navbar__nav-link--text navbar__largetext navbar__no-click-menu-button" href="#" id="navbar-dropdown-4" role="button" data-toggle="dropdown" aria-expanded="false"> Professional Development </a> <!-- Clickable URL menu with hover over dropdown --> <a class="nav-link dropdown-toggle text-wrap text-center my-2 navbar__nav-link--text navbar__largetext navbar__clickable-menu-button" href="/en/professional-development/" id="navbar-dropdown-4" role="button" aria-expanded="false"> Professional Development </a> <!-- Dropdown menu --> <div class="dropdown-menu w-100 top-100 mt-0 navbar__dropdown-menu navbar__wide-menu--prof-dev" aria-labelledby="navbar-dropdown-4"> <div class="container navbar__dropdown-container"> <div class="row mt-2"> <div class="col-md-12 col-lg-6 mb-3 mb-md-3 pl-xl-4 order-2 order-lg-1 navbar__image-column"> <div class="pt-2"> <a href="/en/professional-development/" class="text-body text-decoration-none navbar__image-column--link"> <p class="text-decoration-none navbar__image-column--title"> Grow with SPE </p> <div class="mb-4 navbar__image-container"> <img src="https://spe.widen.net/content/zlaqpxg3yl/jpeg/5%20Navigation.jpeg?w=400&position=c&color=ffffffff&quality=90&u=aggjty" class="rounded img-fluid" alt="Grow with SPE" /> </div> <p class="text-decoration-none"> Advance your professional growth and career development with our suite of resources. </p> <button type="button" class="btn font-weight-bold">Learn More</button> </a> </div> </div> <div class="col-md-12 col-lg-6 mb-3 mb-md-3 pl-xl-2 pr-xl-4 pt-md-3 order-1 order-lg-2"> <div class="list-group list-group-flush"> <a href="/en/training/" class="list-group-item list-group-item-action">Instructor-Led Training</a> <a href="https://streaming.spe.org/webinars-2" target="_blank" rel="noopener" class="list-group-item list-group-item-action">Webinars</a> <a href="https://streaming.spe.org/online-training-courses-2" target="_blank" rel="noopener" class="list-group-item list-group-item-action">Online Training Courses</a> <a href="/en/industry/jobs/" class="list-group-item list-group-item-action">Job Search</a> <a href="/en/training/certification/" class="list-group-item list-group-item-action">Petroleum Engineering Certification</a> <a href="/en/training/competency/" class="list-group-item list-group-item-action">Competency Matrices</a> </div> </div> </div> </div> </div> </li> <!-- End Professional Development Menu --> <!-- Begin Get Involved Menu --> <li class="nav-item dropdown position-static d-lg-flex align-items-lg-center navbar__dropdown-hover"> <!-- Dropdown menu without clickable URL (mobile, tables, etc.) --> <a class="nav-link dropdown-toggle text-wrap text-center my-2 navbar__nav-link--text navbar__no-click-menu-button" href="#" id="navbar-dropdown-5" role="button" data-toggle="dropdown" aria-expanded="false"> Get Involved </a> <!-- Clickable URL menu with hover over dropdown --> <a class="nav-link dropdown-toggle text-wrap text-center my-2 navbar__nav-link--text navbar__clickable-menu-button" href="/en/get-involved/" id="navbar-dropdown-5" role="button" aria-expanded="false"> Get Involved </a> <!-- Dropdown menu --> <div class="dropdown-menu w-100 top-100 mt-0 navbar__dropdown-menu navbar__wide-menu--get-involved" aria-labelledby="navbar-dropdown-5"> <div class="container navbar__dropdown-container"> <div class="row mt-2"> <div class="col-md-12 col-lg-6 mb-3 mb-md-3 pl-xl-4 order-2 order-lg-1 navbar__image-column"> <div class="pt-2"> <a href="/en/get-involved/" class="text-body text-decoration-none navbar__image-column--link"> <p class="text-decoration-none navbar__image-column--title"> Connect and Contribute </p> <div class="mb-4 navbar__image-container"> <img src="https://spe.widen.net/content/jhyrtt6rz5/png/SPE.org%20Navigation%20-%20Get%20Involved.png?crop=false&w=400&position=c&color=ffffffff&quality=90&u=aggjty" class="rounded img-fluid" alt="Connect and Contribute" /> </div> <p class="text-decoration-none"> Engage, collaborate, and help shape the future of our industry with fellow SPE members. </p> <button type="button" class="btn font-weight-bold">Learn More</button> </a> </div> </div> <div class="col-md-12 col-lg-6 mb-3 mb-md-3 pl-xl-2 pr-xl-4 pt-md-3 order-1 order-lg-2"> <div class="list-group list-group-flush"> <a href="/en/industry/technical-sections/" class="list-group-item list-group-item-action">Technical Sections</a> <a href="/en/sections-and-chapters/" class="list-group-item list-group-item-action">Geographic Sections and Chapters</a> <a href="https://connect.spe.org/home" target="_blank" rel="noopener" class="list-group-item list-group-item-action">SPE Connect</a> <a href="/en/volunteer/" class="list-group-item list-group-item-action">Volunteer</a> <a href="/en/ementoring/" class="list-group-item list-group-item-action">eMentoring</a> <a href="/en/awards/" class="list-group-item list-group-item-action">Awards</a> <a href="/en/dl/" class="list-group-item list-group-item-action">Distinguished Lecturer</a> <a href="https://energy4me.org/" target="_blank" rel="noopener" class="list-group-item list-group-item-action">Energy4Me</a> </div> </div> </div> </div> </div> </li> <!-- End Get Involved Menu --> <!-- Begin About SPE Menu --> <li class="nav-item dropdown position-static d-lg-flex align-items-lg-center navbar__dropdown-hover"> <!-- Dropdown menu without clickable URL (mobile, tables, etc.) --> <a class="nav-link dropdown-toggle text-wrap text-center my-2 navbar__nav-link--text navbar__no-click-menu-button" href="#" id="navbar-dropdown-6" role="button" data-toggle="dropdown" aria-expanded="false"> About SPE </a> <!-- Clickable URL menu with hover over dropdown --> <a class="nav-link dropdown-toggle text-wrap text-center my-2 navbar__nav-link--text navbar__clickable-menu-button" href="/en/about/" id="navbar-dropdown-6" role="button" aria-expanded="false"> About SPE </a> <!-- Dropdown menu --> <div class="dropdown-menu w-100 top-100 mt-0 navbar__dropdown-menu navbar__wide-menu--about" aria-labelledby="navbar-dropdown-6"> <div class="container navbar__dropdown-container"> <div class="row mt-2"> <div class="col-md-12 col-lg-6 mb-3 mb-md-3 pl-xl-4 order-2 order-lg-1 navbar__image-column"> <div class="pt-2"> <a href="/en/about/" class="text-body text-decoration-none navbar__image-column--link"> <p class="text-decoration-none navbar__image-column--title"> Learn More about SPE </p> <div class="mb-4 navbar__image-container"> <img src="https://spe.widen.net/content/g4n5eelbaq/jpeg/3%20Navigation.jpeg?w=400&position=c&color=ffffffff&quality=80&u=aggjty" class="rounded img-fluid" alt="Learn More about SPE" /> </div> <p class="text-decoration-none"> Discover more about SPE, how to contact us, and where to learn more. </p> <button type="button" class="btn font-weight-bold">Learn More</button> </a> </div> </div> <div class="col-md-12 col-lg-6 mb-3 mb-md-3 pl-xl-2 pr-xl-4 pt-md-3 order-1 order-lg-2"> <div class="list-group list-group-flush"> <a href="/en/president/" class="list-group-item list-group-item-action">SPE President</a> <a href="/en/about/board/" class="list-group-item list-group-item-action">Board of Directors</a> <a href="/en/industry/history/timeline/" class="list-group-item list-group-item-action">History of Petroleum Technology</a> <a href="/en/members-fueling-progress/" class="list-group-item list-group-item-action">Member Stories</a> <a href="/en/foundation/" class="list-group-item list-group-item-action">SPE Foundation</a> <a href="/en/about/news/" class="list-group-item list-group-item-action">News Center</a> <a href="/en/sales/" class="list-group-item list-group-item-action">Advertise</a> <a href="/en/contact/" class="list-group-item list-group-item-action">Contact</a> </div> </div> </div> </div> </div> </li> </ul> </div> </div> <!-- End Menu Bar Links --> </div> </div> </div> <!-- End Logo Bar Wrapper --> </div> </div> </nav> <!-- END DROPDOWN NAV --> <!-- ******** --> </div> </div><!-- end id="spe-header" --> </header> <!--Main Navigation--> </div> <!-- END PAGE-HEADER BLOCK --> <!-- ********************* --> <!--/.Header--> <!--Main layout--> <div class="container-liquid page-content background"> <!--Content--> <link rel="stylesheet" type="text/css" href="/static/css/spe/v1/content.css"> <div class="bg-color-main-dk container-fluid" style="background-image: url(/media/filer_public/56/2f/562f9f9d-9aca-4c2a-9da7-d073f3846d6d/bit-background-black.png); background-position: center center; background-repeat: no-repeat; background-size: cover;"> <link rel="stylesheet" type="text/css" href="/static/css/spe/v1/content.css"> <div class="container" style="background-image: url(); background-position: center center; background-repeat: no-repeat; background-size: cover;"> <link rel="stylesheet" type="text/css" href="/static/css/spe/v1/content.css"> <style> .grid_row_background_size{ background-size: cover; } @media screen and (max-width: 976px) { .grid_row_background_size{ background-size: 100% 100%; } } </style> <div class="row grid_row_background_size" style="background-image: url(); background-position: center center; background-repeat: no-repeat; opacity: 1.0; " > <div class="col col-12 col-sm-12 col-md-6 col-lg-6 col-xl-6 py-4" style="background-image: url(); background-position: center center; background-repeat: no-repeat; background-size: cover;" " > <div> <div class="foreground-pic"></div> <img src="/media/filer_public_thumbnails/filer_public/44/c2/44c2f7c6-8f18-4a60-8f6e-2f749cd1eaac/projects-facilities-construction-125x125.png__125.0x125.0_subsampling-2.png" class="img-fluid img-responsive float-left pull-left mr-2" alt="Facilities icon" > </div> <p><small>  SPE TECHNICAL DISCIPLINES</small></p> <h1><span class="text-white"><span style="font-size: 1.2em;">Projects, Facilities, and Construction</span></span></h1> </div> <div class="col col-12 col-sm-12 col-md-6 col-lg-6 col-xl-6" style="background-image: url(); background-position: center center; background-repeat: no-repeat; background-size: cover;" " > </div> </div> </div> </div> <link rel="stylesheet" type="text/css" href="/static/css/spe/v1/content.css"> <div class="bg-color-main container" style="background-image: url(); background-position: center center; background-repeat: no-repeat; background-size: cover;"> <link rel="stylesheet" type="text/css" href="/static/css/spe/v1/content.css"> <style> .grid_row_background_size{ background-size: cover; } @media screen and (max-width: 976px) { .grid_row_background_size{ background-size: 100% 100%; } } </style> <div class="row p-4 bg-color-main grid_row_background_size" style="background-image: url(); background-position: center center; background-repeat: no-repeat; opacity: 1.0; " > <div class="bg-color-main col col-12 col-sm-12 col-md-12 col-lg-3 col-xl-3" style="background-image: url(); background-position: center center; background-repeat: no-repeat; background-size: cover;" " > <h4 style="text-align: center;">Technical Director</h4> <p> <div> <div class="foreground-pic"></div> <img src="/media/filer_public_thumbnails/filer_public/dd/9a/dd9a5e88-a253-4e70-8379-c6dabfb830be/hamad-al-marri.jpg__205.0x205.0_q85_subsampling-2.jpg" width="200" height="200" class="img-fluid img-responsive rounded-circle mx-auto d-block" alt="Hamad Al-Marri" > </div> </p> <p style="text-align: center;"><strong>Hamad Al-Marri</strong><br> Saudi Aramco</p> <hr> <p><a href="https://connect.spe.org/communities/community-home?communitykey=f5d71314-06f9-40d4-a6c2-430aacffd844&amp;tab=groupdetails" target="_blank"><strong>Projects, Facilities, and Construction Technical Community</strong></a></p> <div class="sidebarItem"> <p><strong>Technical Sections</strong></p> <ul> <li><a href="https://connect.spe.org/fts/home" target="_blank">Flow Assurance</a></li> <li><a href="https://connect.spe.org/fmts/home" target="_blank">Flow Measurement</a></li> <li><a href="https://connect.spe.org/hydrogen/home" target="_blank">Hydrogen</a></li> <li><a href="https://connect.spe.org/methaneemissionsmanagement/home" target="_blank">Methane Emissions Management</a></li> <li><a href="https://connect.spe.org/separationstechnology/home" target="_blank">Separations Technology</a></li> <li><a href="https://connect.spe.org/roboticsautonomoussystems/home" target="_blank">Robotics and Autonomous Systems</a></li> <li><a href="/industry/technical-sections/" target="_self" class style="opacity: 1.0;">Other Technical Sections</a></li> </ul> </div> <p style="text-align: center;"> </p> <p style="text-align: center;">Not a member?<br> ​​​​​​​<a href="/members/" target="_self" class="btn btn-primary" style="opacity: 1.0;">&nbsp;&nbsp;&nbsp;Join SPE&nbsp;&nbsp;&nbsp;</a></p> <p style="text-align: center;"> </p> <div> <a href="https://connect.spe.org" > <div class="foreground-pic"></div> <img src="/media/filer_public_thumbnails/filer_public/79/72/7972224e-9bf5-4061-8cbc-205504a90249/spe_connect_logo_400x92.png__400.0x92.0_subsampling-2.png" width="180" class="img-fluid img-responsive mx-auto d-block" alt="SPE connect logo" > </a> </div> <p style="text-align: center;">SPE's social network</p> </div> <div class="bg-color-main col col-12 col-sm-12 col-md-12 col-lg-6 col-xl-6" style="background-image: url(); background-position: center center; background-repeat: no-repeat; background-size: cover;" " > <h3>Projects, Facilities, and Construction News</h3> <hr> <style> .rss-date {color: gray;} .wrapper { display: grid; grid-gap: 10px; justify-items: center; justify-content: center; width: 100%; } .card { border: none; background-color: transparent; } .cardimage { width: 100%; padding-top: 56.25%; /* 16:9 Aspect Ratio */ background-position: center; background-size: cover; } .card-title, .card-title a { font-size: 16px; color: black; } </style> <div > <div class="row"> <div class="wrapper" style="grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));"> <div class="wrapperchild box"> <div class="card mb-2" style="break-inside: avoid"> <div class="cardimage w-100" style="background-image: url(https://assets.spe.org/dims4/default/871d926/2147483647/resize/x592%3E/quality/90/?url=http%3A%2F%2Fspe-brightspot.s3.us-east-2.amazonaws.com%2F9d%2F6a%2Fc81e48d640b7be0c0d30bce4ce8d%2Flouisiana-lng.PNG)"></div> <div class="card-body"> <h5 class="card-title rss-title"> <a href="https://jpt.spe.org/woodside-sells-down-stake-in-louisiana-lng">Woodside Sells Down Stake in Louisiana LNG</a> </h5> <p class="card-text"> <span class="rss-date"><small>08 April 2025</small></span><br> </p> </div> </div> </div> <div class="wrapperchild box"> <div class="card mb-2" style="break-inside: avoid"> <div class="cardimage w-100" style="background-image: url(https://assets.spe.org/dims4/default/89975fc/2147483647/resize/x618%3E/quality/90/?url=http%3A%2F%2Fspe-brightspot.s3.us-east-2.amazonaws.com%2F67%2F8b%2F80c2d569443e9fcc159aedd202cc%2Faramco-drones.jpg)"></div> <div class="card-body"> <h5 class="card-title rss-title"> <a href="https://jpt.spe.org/aramco-eyes-2027-start-for-drone-inspections-under-mou-with-terra-drone">Aramco Eyes 2027 Start for Drone Inspections Under MOU With Terra Drone</a> </h5> <p class="card-text"> <span class="rss-date"><small>08 April 2025</small></span><br> </p> </div> </div> </div> </div> </div> <div class="row"> <div class="col"> <p class="float-right"> <a href="https://jpt.spe.org/" target="_self" class="btn-sm">See more articles</a> </p> </div> </div> </div> <div class="m-4"> </div> <link rel="stylesheet" type="text/css" href="/static/css/spe/v1/content.css"> <style> .grid_row_background_size{ background-size: cover; } @media screen and (max-width: 976px) { .grid_row_background_size{ background-size: 100% 100%; } } </style> <div class="row grid_row_background_size" style="background-image: url(); background-position: center center; background-repeat: no-repeat; opacity: 1.0; " > <div class="col col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12" style="background-image: url(); background-position: center center; background-repeat: no-repeat; background-size: cover;" " > <h3>SPE Energy Stream</h3> <hr> <style>div.embed-responsive.embed-responsive-16by9::before { padding-top:0 }</style> <div class="embed-responsive embed-responsive-16by9"> <iframe class="embed-responsive-item" src="https://streaming.spe.org/get-embed-code?id=49&amp;type=playlist" loading="lazy" scrolling="no" frameborder="no" allowfullscreen ></iframe> </div> <div class="m-2"> </div> <div> <div class="foreground-pic"></div> <img src="/media/filer_public_thumbnails/filer_public/e1/64/e164dd7f-4219-4d57-b336-9b3055f38f45/spe_energy_stream_logo_rgb.png__1875.0x375.0_subsampling-2.png" width="200" class="img-fluid img-responsive float-right pull-right ml-2" alt="SPE Energy Stream logo" > </div> <p>SPE Energy Stream is your go-to for watching thought leaders, subject-matter experts, and leading companies share their perspectives and technical solutions. Find discussions and webinars available live and on-demand.</p> <p style="text-align: right;"><a data-feathr-click-track="true" href="https://streaming.spe.org/projects-facilities-and-construction/" target="_blank">View more on SPE Energy Stream</a></p> </div> </div> <div class="m-4"> </div> <link rel="stylesheet" type="text/css" href="/static/css/spe/v1/content.css"> <style> .grid_row_background_size{ background-size: cover; } @media screen and (max-width: 976px) { .grid_row_background_size{ background-size: 100% 100%; } } </style> <div class="row bg-white grid_row_background_size" style="background-image: url(); background-position: center center; background-repeat: no-repeat; opacity: 1.0; " > <div class="col col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12" style="background-image: url(); background-position: center center; background-repeat: no-repeat; background-size: cover;" " > <a id="journal"></a> <h3>SPE Insights and Education</h3> <hr> <h4>SPE Journal</h4> <div> <a href="https://www.onepetro.org/journals/SPE%20Journal" > <div class="foreground-pic"></div> <img src="/media/filer_public_thumbnails/filer_public/66/f2/66f27f0a-b5d2-4354-bf31-064df5511c2c/spe_journal-rectangle.png__600.0x370.0_subsampling-2.png" width="250" class="img-fluid img-responsive float-left pull-left mb-1 mr-3" alt="SPE Journal cover" > </a> </div> <p>As a leading publication in oil, petroleum, and natural gas, <em><a href="/publications/spe-journal/" target="_self" class style="opacity: 1.0;">SPE Journal</a></em> maintains the highest quality standards in scholarly publishing and offers practical applications to solve your biggest challenges.</p> <p><span style='font-family: "Open Sans", HelveticaNeue, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 1em;'>Top papers showcasing cutting-edge methods and technology solutions you can trust are selected after rigorous evaluation by industry experts.</span><br>  </p> <h4>Oil and Gas Facilities</h4> <p><em></em></p> <div> <a href="https://jpt.spe.org/oil-and-gas-facilities" > <div class="foreground-pic"></div> <img src="/media/filer_public_thumbnails/filer_public/8d/68/8d68094d-0c03-4602-88a9-5d1307ddc0d2/ogf_logo_rgb_2024.jpg__994.0x260.0_q85_subsampling-2.jpg" width="200" class="img-fluid img-responsive float-right pull-right mb-2 ml-3" alt="OGF logo" > </a> </div> <p><em><a href="https://jpt.spe.org/oil-and-gas-facilities">OGF</a></em> is a biweekly e-newsletter, delivering the latest facilities engineering news directly to your inbox.</p> <p><a href="https://jpt.spe.org/oil-and-gas-facilities">Read current news on <em>OGF</em></a><br>  </p> <div> <a href="https://www.onepetro.org/" > <div class="foreground-pic"></div> <img src="/media/filer_public_thumbnails/filer_public/67/b6/67b6bdb8-b97f-4232-84ff-9a207378d57f/onepetro-hp.png__165.0x92.0_subsampling-2.png" width="125" class="img-fluid img-responsive float-right pull-right ml-2" alt="OnePetro logo" > </a> </div> <h4>Technical Literature</h4> <p><a href="https://onepetro.org/" target="_blank" rel="noopener" class style="opacity: 1.0;">OnePetro</a> online technical library — the home for <a href="https://onepetro.org/SJ" target="_blank" rel="noopener" class style="opacity: 1.0;">SPE Journal</a>, <a href="https://onepetro.org/books" target="_blank" rel="noopener" class style="opacity: 1.0;">books</a> and conference proceedings for projects, facilities, and construction and all upstream oil and gas topics. Over 240,000 items from 21 publishing partners.<br>  </p> </div> </div> </div> <div class="col col-12 col-sm-12 col-md-12 col-lg-3 col-xl-3 px-4" style="background-image: url(); background-position: center center; background-repeat: no-repeat; background-size: cover;" " > <link rel="stylesheet" type="text/css" href="/static/css/spe/v1/content.css"> <style> .grid_row_background_size{ background-size: cover; } @media screen and (max-width: 976px) { .grid_row_background_size{ background-size: 100% 100%; } } </style> <div class="row grid_row_background_size" style="background-image: url(); background-position: center center; background-repeat: no-repeat; opacity: 1.0; " > <div class="border border-color-main-lt col col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12 p-3" style="background-image: url(); background-position: center center; background-repeat: no-repeat; background-size: cover;" " > <h3 style="text-align: center;">Upcoming Events</h3> <div class="m-4"> </div> <div id="new_eva_disc_events-732250" class="mx-1 my-2" ></div> <h5 class="sidebar_events_heading"><a href="/training/courses/">Training Courses</a></h5> </div> </div> <div class="mt-3"> </div> </div> </div> <link rel="stylesheet" type="text/css" href="/static/css/spe/v1/content.css"> <style> .grid_row_background_size{ background-size: cover; } @media screen and (max-width: 976px) { .grid_row_background_size{ background-size: 100% 100%; } } </style> <div class="row py-4 bg-white grid_row_background_size" style="background-image: url(); background-position: center center; background-repeat: no-repeat; opacity: 1.0; " > <div class="col col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12" style="background-image: url(); background-position: center center; background-repeat: no-repeat; background-size: cover;" " > <!-- Begin Marketo JS --> <script type='text/javascript'> // the rtp tag used for this component is already called on page load & currently located in 2_global.html under mainsite templates, // in the future, we plan to move the Marketo RTP initialization script into GTM and honor cookie consent, // once we do that, if they opt out, then this check will see that there is no rtp variable, and the component will do nothing. JQ 11/2024 if (typeof rtp !== 'undefined' && typeof rtp == 'function') { // Populate recommendation rtp('get', 'rcmd', 'richmedia'); // Change template configuration rtp("set", "rcmd", "richmedia", { // the rtp code expects the horizontal template to be called "template1", if you want to use the vertical template, update this to be template2 "template1": { "rcmd.title.text": "Recommended for You", "rcmd.cta.background.color": "#0d4c92", "rcmd.cta.text": "Read More", }, } ); } </script> <!-- End Marketo JS --> <style> #predictive_cont_732254 .rtp_rcmd2_label H4 { color: #0d4c92 !important; } </style> <div id="predictive_cont_732254" class="container-fluid clearfix"> <div class="RTP_RCMD2" data-rtp-template-id="template1"></div> </div> </div> </div> </div> <!--/.Content--> </div> <!--Main layout--> <!--Footer--> <!-- #spe-footer short begin --> <footer class="pt-4 pb-5 pt-md-5 bg-white position-relative spe-shadow-top"> <div class="container-xl main-footer__container"> <div class="row"> <div class="col-12 col-md text-left"> <ul class="list-unstyled"> <li><a href="/en/"><img src="/static/www/img/spe_vert_blue.svg" alt="SPE Logo" id="spelogofooter" class="img-fluid"></a></li> </ul> </div> <div class="col-12 col-md text-left main-footer__nav-links"> <div class="mb-2 font-weight-bold main-footer__nav-links-header">Quick Links</div> <ul class="list-unstyled"> <li class="mb-2"><a href="/en/members/">Membership</a></li> <li class="mb-2"><a href="/en/events/about-events/">Events</a></li> <li class="mb-2"><a href="/en/publications-and-insights/">Publications and Insights</a></li> <li class="mb-2"><a href="/en/professional-development/">Professional Development</a></li> <li class="mb-2"><a href="/en/get-involved/">Get Involved</a></li> <li class="mb-2"><a href="/en/about/">About SPE</a></li> </ul> </div> <div class="col-12 col-md text-left main-footer__nav-links"> <div class="mb-2 font-weight-bold main-footer__nav-links-header">Member Services</div> <ul class="list-unstyled"> <li class="mb-2"><a href="/member/access/MyAccount">Manage Your Profile</a></li> <li class="mb-2"><a href="/en/join/">Join</a></li> <li class="mb-2"><a href="/en/join/renew/">Renew</a></li> <li class="mb-2"><a href="/en/contact/">Contact Us</a></li> </ul> </div> <div class="col-12 col-md text-left main-footer__nav-links"> <div class="mb-2 font-weight-bold text-xl main-footer__nav-links-header">Follow Us</div> <ul class="list-unstyled d-flex mb-4"> <li> <a href="https://www.linkedin.com/company/23356/" target="_blank" rel="noopener" class="mr-3" title="Join SPE's professional network on LinkedIn"> <i class="fa-brands fa-linkedin-in fa-2xl"></i> </a> </li> <li> <a href="https://www.facebook.com/spemembers" target="_blank" rel="noopener" class="mr-3" title="Connect with SPE on Facebook"> <i class="fa-brands fa-facebook fa-2xl"></i> </a> </li> <li> <a href="https://instagram.com/spengineers/" target="_blank" rel="noopener" class="mr-3" title="Connect with SPE on Instagram"> <i class="fa-brands fa-instagram fa-2xl"></i> </a> </li> <li> <a href="https://twitter.com/SPEtweets" target="_blank" rel="noopener" class="mr-3" title="Follow SPE Events on Twitter"> <i class="fa-brands fa-x-twitter fa-2xl"></i> </a> </li> <li> <a href="https://www.youtube.com/2012SPE" target="_blank" rel="noopener" title="Explore SPE videos on YouTube"> <i class="fa-brands fa-youtube fa-2xl"></i> </a> </li> </ul> <div class="mb-2 font-weight-bold main-footer__nav-links-header">SPE International App</div> <ul class="list-unstyled d-flex"> <li> <a href="https://itunes.apple.com/us/app/spe-international/id1448458533" target="_blank" rel="noopener" title="Download the SPE International App from the Apple App Store"> <img src="/static/www/img/apple_app_store_icon.svg" height="40" width="120" class="mr-3" alt="Apple App Store"> </a> </li> <li> <a href="https://play.google.com/store/apps/details?id=org.spe.mobile" target="_blank" rel="noopener" title="Download the SPE International App from the Google Play Store"> <img src="/static/www/img/google_play_store_icon.svg" height="40" width="135" alt="Google Play Store"> </a> </li> </ul> </div> </div> <div class="row d-flex flex-column flex-md-row align-items-center"> <div class="col-12 p-md-0"> <hr class="main-footer__hr"> </div> <div class="col-12 col-md-6 text-left pl-md-3 order-2 order-md-1 mt-4 mt-md-0 main-footer__copyright-text"> <p class="mb-0">&copy; Copyright 2003-2025, Society of Petroleum Engineers. All rights reserved.</p> </div> <div class="col-12 col-md-6 text-left text-md-right pr-md-3 order-1 order-md-2 mt-2 mt-md-0 main-footer__bottom-nav-links"> <ul class="mb-0 list-inline d-flex flex-column flex-md-row justify-content-end"> <li class="list-inline-item"><a href="/en/about/privacypolicy/">Privacy Policy</a></li> <li class="list-inline-item mt-2 mt-md-0 ml-md-3 mr-0"><a href="/en/about/terms-of-service/">Terms of Service</a></li> <li class="list-inline-item mt-2 mt-md-0 ml-md-3 mr-0"><a href="/en/about/professional-code-of-conduct/">Code of Conduct</a></li> <li class="list-inline-item mt-2 mt-md-0 ml-md-3 mr-0"><a href="/en/about/guidelines/">SPE Guidelines</a></li> <li class="list-inline-item mt-2 mt-md-0 ml-md-3 mr-0"><a href="/en/sitemap/">Site Map</a></li> </ul> </div> </div> </div> </footer> <!-- #spe-footer short end --> </div> <!-- Ending </div> for <div id="navbar-page-wrapper"> - Required to wrap entire page for sticky navbar to scroll to the bottom --> <!--/.Footer--> <!--Js--> <!-- GLOBAL JS FOR ALL PAGES (loaded in head tag) --> <!-- removing ckeditor reference since not needed; do not use ckeditor CDN! --> <!-- JS BEGIN --> <!-- Bootstrap 4 --> <!-- Until bootstrap5 we need jquery --> <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct" crossorigin="anonymous"></script> <script> //<!-- sas: new javascript to set the welcome msg, login/logout and profile links with ajax. --> //<!-- note: using fetch instead of jquery for future deprecation of jquery --> const spe_header_personalize = () => { const token = 'wbyf3MUE7ggsQvhOaBsjJbjV5pjKdCjOhRQU7dtBpEZWsQgDeB3RMeGiouW0wCJ4' const proxy_prefix = "https://www.spe.org" const api_url = "/en/api/header/data/" // fetch the needed properties from new web api url fetch(api_url, { method: 'GET', headers: { 'X-CSRFToken': token, 'Accept': 'application/json', }, credentials: 'include', signal: AbortSignal.timeout(6000), }).then((response) => { if (response.ok) return response.json() throw new Error('[' + response.status + '] ' + response.statusText); }).then((json_data) => { let our_url = window.location.toString() // replace the default login url with our target, so it comes back to us instead of the homepage // note: if base login ever includes a param we need to adjust our string here let login_url = proxy_prefix + '/sso/protected_login.html?redirect_target=' + encodeURIComponent(our_url) document.getElementById('global_login').setAttribute("href", login_url); // if we have sso token and are authenticated then reset for being logged in if (json_data.jwt) { let jwt = json_data.jwt if (jwt.authenticated) { // replace the sign in with sign out document.getElementById('header-login-label').innerText = " Sign Out" // change the global_login href to logout let logout_url = proxy_prefix + '/appsaccess/login/servlet/LoginServlet?command=logout&redirect_target=' + encodeURIComponent(our_url) console.log(logout_url) document.getElementById('global_login').setAttribute("href", logout_url); // enable the authenticated only links // Array.from(document.querySelectorAll('.sso-authenticated-only')).forEach((el) => el.classList.remove('disabled')); // set the welcome msg document.getElementById('header-welcome-msg').innerText = jwt.greeting_name; // if we are unpaid then switch join to renew if (jwt.groups && jwt.groups.includes('unpaid members')) { document.getElementById('global-nav-join-link').innerText = "Renew"; document.getElementById('global-nav-join-link').href = "/en/join/renew/"; } // if we are in the members group then we hide the join/renew all together if (jwt.groups && jwt.groups.includes('members')) document.getElementById('global-nav-join').classList.add('d-none'); } // note: page should be correctly set for "login" so no else block needed } }).catch((error) => { console.log(error + " while fetching user login information") }); }; if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", spe_header_personalize); } else { spe_header_personalize(); } </script> <!--/.Js--> <script type="text/javascript"> // we execute on page load document.addEventListener('DOMContentLoaded', function() { // first, we create this function to create a display location for the events, same logic used in event calendar const buildDisplayLocation = (event) => { let displayLocation = `` if (event['City'] && event['Province']) { if (event.City === event.Province) displayLocation = `${event.City}, ${event.CountryISO3}` else displayLocation = `${event.City}, ${event.Province}, ${event.CountryISO3}` } else if(event.City && !event.Province) displayLocation = `${event.City}, ${event.CountryISO3}` else if (event.Province && !event.City) displayLocation = `${event.Province}, ${event.CountryISO3}` return displayLocation } // a simple list of the 3-day abbreviations for month names, used in the below function const months = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ] // next, this function creates a displayable date range for the events const buildDisplayDateRange = (event) => { // we start by taking the datetimes BeginDate & EndDate, and turning them into year, month, & day variables let displayLocation = ``, beginDate = event.BeginDate.slice(0, 10), beginYear = event.BeginDate.slice(0, 4), // we turn the month into the abbreviations, from 11 -> "Nov" beginMonth = months[ parseInt(event.BeginDate.slice(5, 7)) - 1 ], beginDay = event.BeginDate.slice(8, 10), endDate = event.EndDate.slice(0, 10), endYear = event.EndDate.slice(0, 4), endMonth = months[ parseInt(event.EndDate.slice(5, 7)) - 1 ], endDay = event.EndDate.slice(8, 10); // now we use several conditionals to decide how the date should be built/displayed // first, we check if the event starts & ends on the same date, if so, we can skip the rest of the steps if (beginDate === endDate) displayLocation = `${beginDay}, ${beginMonth}, ${beginYear}` // if the event lasts more than one day, we go through checks to format the display date else { // to start, we use the day of the start date, then by comparing the month & year, displayLocation = `${beginDay}` // if the month or year is different, we make sure to add them to the first part of the display_date if (beginMonth !== endMonth) displayLocation += ` ${beginMonth}` if (beginYear !== endYear) displayLocation += ` ${beginYear}` // then, we add the ending date to the end of the display date displayLocation += ` - ${endDay} ${endMonth} ${endYear}` } return displayLocation; } // end of buildDisplayDateRange // we create this function to an event's data & turn it into a list item const buildListItem = (event, eventType) => { // we build each event roughly the same, plugging in data from said event let listItem = `<li class="event mx-1 my-1" style="list-style-type:none; padding-bottom: 5px;" id="${event.e}" title="${event.Code}"> <span class="event_title"> ` // if the event has an EventUrl, we wrap it in an <a> tag, otherwise we just display the title, I added tabs for html consistency if (event.EventUrl) listItem += ` <a href="${event.EventUrl}">${event.Title}</a>` else listItem += `${event.Title}` // close the span listItem += ` </span> ` // this last part we do different if the event_type is a call for paper or not if (eventType === 'cfp') { // build out the display call for papers end date/deadline let endYear = event.CallForPapersEnds.slice(0, 4), endMonth = months[ parseInt(event.CallForPapersEnds.slice(5, 7)) - 1 ], endDay = event.CallForPapersEnds.slice(8, 10), deadline = `${endDay} ${endMonth} ${endYear}`; listItem += ` <span class="cfp_deadline" style="display:block;"><strong>Deadline: </strong>${deadline}</span>` } else { // we call the above functions to form the displayLocation & displayDate let displayLocation = buildDisplayLocation(event) let displayDateRange = buildDisplayDateRange(event) listItem += ` <span class="date_and_location" style="display:block;">${displayDateRange} | ${displayLocation}</span>` } listItem += ` </li> ` return listItem } // end of addEventListener // we build this function, which will loop over our data below to filter it into our 3 boxes, // as a reminder, the event types we want are conferences & workshops, // call for papers are just conferences with a valid CallForPapersBegins/Ends date range that we are currently within const filterDataIntoBoxes = (data, discipline, maxConf, maxCfp, maxWork) => { // we need to keep track of how many events we have placed in each box and said events, let WorkCount = 0, ConfCount = 0, CfpCount = 0, // the 'boxes' are where we store the events as html list items, // they are ordered as shown above, workbox, confbox, & cfpbox eventBoxes = [``, ``, ``], boxNames = ['Conferences', 'Workshops', 'Call for Papers'], now = new Date(Date.now()); // now we loop through the list and check each event // .some is similar to .forEach, except that you can exit it early via a return true statement data.some( (event) => { // we need to check each event, // first if they have the chosen discipline, we check the primary & secondary discipline list // then if they a) are a conference/cfp or workshop, b) if the box they are going to be added into is full or not if ( (event.PrimaryDisciplines.includes(discipline) || event.SecondaryDisciplines.includes(discipline) ) && (event.TypeCode === 'W' || event.TypeCode === 'C') ) { // we start with the workshop conditional, the simplest case, we only add it if we haven't hit the max number yet if (event.TypeCode === 'W' && WorkCount < maxWork) { // we increment the count, turn it into a list item, and add to the box WorkCount += 1; // this method builds out each event into a <li> list item eventBoxes[1] += buildListItem(event, 'W') } // if the event is a conference, we have to do some checks to see if it is also a call for paper event else { // first, regardless of if the event qualifies as a call for paper, it's still a conference, // we add to the conference box unless we've already hit our max number if (ConfCount < maxConf) { // we increment the count, turn it into a list item, and add to the box ConfCount += 1; // this method builds out each event into a <li> list item eventBoxes[0] += buildListItem(event, 'C') } // now, we need to check if this conference is just a conference or if it also qualifies as a call for paper event via a series of checks // first, we check if the conference has a beginning & end date, // but we skip it entirely if the cfp box hit its max number if (CfpCount < maxCfp && event.CallForPapersBegins && event.CallForPapersEnds) { // if so, we check if we are currently within that date range let beginDate = new Date(event.CallForPapersBegins), endDate = new Date(event.CallForPapersEnds); if (endDate > now && now > beginDate) { // if we made it here, the event is a call for paper & we have space in the box, // we increment the count, turn it into a list item, and add to the box CfpCount += 1; // this method builds out each event into a <li> list item eventBoxes[2] += buildListItem(event, 'cfp') } } } // end of else } // end of if conditional that checks if the event matches our discipline & type criteria // we do final check at the end of each loop, if we've hit the max for each box, we break out of the loop (return true breaks out of the .some loop) if (WorkCount === maxWork && ConfCount === maxConf && CfpCount === maxCfp) return true; }) // end of forEach loop // now that the loop is over, we append the boxes & list items to the below div let panel_html = ``, boxNameIndex = 0; eventBoxes.forEach( (box) => { // if the box is an empty string, it will read as falsy if (box) { // if true, we wrap the list items within an h4 and ul tag. panel_html += `<h4 style="font-size:90%;">${boxNames[boxNameIndex]}</h4> <ul class="mx-1 px-1" style="font-size:81%;"> ` panel_html += box; panel_html += `</ul> ` } // we increment this to easily add the name of the box as part of the loop boxNameIndex += 1; }) // a final check, if we had any boxes, html will be truthy and we add to the below div if (panel_html) document.getElementById('new_eva_disc_events-732250').innerHTML = panel_html; } // end of filterDataIntoBoxes // we transform the context template variables into js variables const evaUrl = 'https://www.spe.org/iapps2/evadata/events/calendar/', discipline = 'PROJECTS', maxConf = '4', maxCfp = '4', maxWork = '4'; // we do a vanilla js call to get the new eva data fetch(evaUrl, { // timeout after 10 seconds signal: AbortSignal.timeout(10000), }) .then(response => { if (response.ok) return response.json() throw new Error(`[${response.status}] ${response.statusText}`) }) .then(data => { // this method does all the logic into filter the data into 'boxes' and append to the html below, // we turn the max counts into numbers for easy comparison within the method filterDataIntoBoxes(data, discipline, parseInt(maxConf), parseInt(maxCfp), parseInt(maxWork)) }) .catch(error => { console.log(`${error} while trying to populate discipline events.`) }) }) </script> </body></html>

Pages: 1 2 3 4 5 6 7 8 9 10