<!-- HTML header for doxygen 1.8.8-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- For Mobile Devices -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<title>QuEST: QuEST_internal.h File Reference</title>
<!--<link href="tabs.css" rel="stylesheet" type="text/css"/>-->
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="style.css" rel="stylesheet" type="text/css"/>
<link href='https://fonts.googleapis.com/css?family=Roboto+Slab' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="jquery.smartmenus.bootstrap.css" rel="stylesheet">
<script type="text/javascript" src="jquery.smartmenus.js"></script>
<!-- SmartMenus jQuery Bootstrap Addon -->
<script type="text/javascript" src="jquery.smartmenus.bootstrap.js"></script>
<!-- SmartMenus jQuery plugin -->
</head>
<body>
<nav class="navbar navbar-default" role="navigation">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand"><img alt="Logo" src="logo.png"/></a>
<a class="navbar-brand"><b>QuEST</b> v3.1.0<br>The Quantum Exact Simulation Toolkit</a>
</div>
</div>
</nav>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div class="content" id="content">
<div class="container">
<div class="row">
<div class="col-sm-12 panel " style="padding-bottom: 15px;">
<div style="margin-bottom: 15px;">
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_70834f0dcd10de01d2e35ab402a2238e.html">tysonjones</a></li><li class="navelem"><a class="el" href="dir_1957401ef452be7528010ba0f4832a45.html">Desktop</a></li><li class="navelem"><a class="el" href="dir_dee4414d5d72b49a9429e079789ffd08.html">GithubRepos</a></li><li class="navelem"><a class="el" href="dir_a89b43d59316bb5045aa22bb53a67d29.html">QuEST</a></li><li class="navelem"><a class="el" href="dir_f1fe56bf5ef15ff22696c757278c6962.html">QuEST</a></li><li class="navelem"><a class="el" href="dir_757750313c878cfe3b7d1ade55b4b819.html">src</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">QuEST_internal.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include "<a class="el" href="QuEST_8h_source.html">QuEST.h</a>"</code><br />
<code>#include "<a class="el" href="QuEST__precision_8h_source.html">QuEST_precision.h</a>"</code><br />
</div>
<p><a href="QuEST__internal_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ab17aea39cda8080d9f614bf737154f57"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ab17aea39cda8080d9f614bf737154f57">conjugateMatrixN</a> (<a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> u)</td></tr>
<tr class="separator:ab17aea39cda8080d9f614bf737154f57"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aa6c3f86010ad398f42b0577ea3bb5bcf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aa6c3f86010ad398f42b0577ea3bb5bcf">densmatr_calcFidelity</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, <a class="el" href="structQureg.html">Qureg</a> pureState)</td></tr>
<tr class="separator:aa6c3f86010ad398f42b0577ea3bb5bcf"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a8c9da88f734b0862f4cce7d819e6d3b5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a8c9da88f734b0862f4cce7d819e6d3b5">densmatr_calcHilbertSchmidtDistance</a> (<a class="el" href="structQureg.html">Qureg</a> a, <a class="el" href="structQureg.html">Qureg</a> b)</td></tr>
<tr class="separator:a8c9da88f734b0862f4cce7d819e6d3b5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a6ff3dc624b5fafe8edae4fe327c255a0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a6ff3dc624b5fafe8edae4fe327c255a0">densmatr_calcInnerProduct</a> (<a class="el" href="structQureg.html">Qureg</a> a, <a class="el" href="structQureg.html">Qureg</a> b)</td></tr>
<tr class="separator:a6ff3dc624b5fafe8edae4fe327c255a0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ad405e3fac20997043e0236b751e44270"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ad405e3fac20997043e0236b751e44270">densmatr_calcProbOfOutcome</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int measureQubit, int outcome)</td></tr>
<tr class="separator:ad405e3fac20997043e0236b751e44270"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ae45eefa65f4ecd37bab84fade7cf7f1f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ae45eefa65f4ecd37bab84fade7cf7f1f">densmatr_calcPurity</a> (<a class="el" href="structQureg.html">Qureg</a> qureg)</td></tr>
<tr class="memdesc:ae45eefa65f4ecd37bab84fade7cf7f1f"><td class="mdescLeft"> </td><td class="mdescRight">Computes the trace of the density matrix squared. <a href="QuEST__internal_8h.html#ae45eefa65f4ecd37bab84fade7cf7f1f">More...</a><br /></td></tr>
<tr class="separator:ae45eefa65f4ecd37bab84fade7cf7f1f"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a6153547f245c05874161a105e9a2f02c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a6153547f245c05874161a105e9a2f02c">densmatr_calcTotalProb</a> (<a class="el" href="structQureg.html">Qureg</a> qureg)</td></tr>
<tr class="separator:a6153547f245c05874161a105e9a2f02c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab321af37fe3490253e12b7c70b8d2a98"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ab321af37fe3490253e12b7c70b8d2a98">densmatr_collapseToKnownProbOutcome</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int measureQubit, int outcome, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> outcomeProb)</td></tr>
<tr class="memdesc:ab321af37fe3490253e12b7c70b8d2a98"><td class="mdescLeft"> </td><td class="mdescRight">Renorms (/prob) every | * outcome * >< * outcome * | state, setting all others to zero. <a href="QuEST__internal_8h.html#ab321af37fe3490253e12b7c70b8d2a98">More...</a><br /></td></tr>
<tr class="separator:ab321af37fe3490253e12b7c70b8d2a98"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a20a155f53efc45c16803d7539c2c199d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a20a155f53efc45c16803d7539c2c199d">densmatr_initClassicalState</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int stateInd)</td></tr>
<tr class="separator:a20a155f53efc45c16803d7539c2c199d"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a2418bd9a6b9e6a0acf11faf5982d5d29"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a2418bd9a6b9e6a0acf11faf5982d5d29">densmatr_initPlusState</a> (<a class="el" href="structQureg.html">Qureg</a> targetQureg)</td></tr>
<tr class="separator:a2418bd9a6b9e6a0acf11faf5982d5d29"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ae5ad68d054875913d0f7ec654840a9ec"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ae5ad68d054875913d0f7ec654840a9ec">densmatr_initPureState</a> (<a class="el" href="structQureg.html">Qureg</a> targetQureg, <a class="el" href="structQureg.html">Qureg</a> copyQureg)</td></tr>
<tr class="separator:ae5ad68d054875913d0f7ec654840a9ec"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ae4ebc1f4dd48922bfb30ad1692310269"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ae4ebc1f4dd48922bfb30ad1692310269">densmatr_measureWithStats</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int measureQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *outcomeProb)</td></tr>
<tr class="separator:ae4ebc1f4dd48922bfb30ad1692310269"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a72b26b971531dbdc64de20501f368545"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a72b26b971531dbdc64de20501f368545">densmatr_mixDamping</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> damping)</td></tr>
<tr class="separator:a72b26b971531dbdc64de20501f368545"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a8adaba9dbdad6f7ab41ae4b8db0abefe"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a8adaba9dbdad6f7ab41ae4b8db0abefe">densmatr_mixDensityMatrix</a> (<a class="el" href="structQureg.html">Qureg</a> combineQureg, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> otherProb, <a class="el" href="structQureg.html">Qureg</a> otherQureg)</td></tr>
<tr class="separator:a8adaba9dbdad6f7ab41ae4b8db0abefe"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a515b6a920b1715d4eae25dcf29f39b95"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a515b6a920b1715d4eae25dcf29f39b95">densmatr_mixDephasing</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> dephase)</td></tr>
<tr class="separator:a515b6a920b1715d4eae25dcf29f39b95"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a3765e92c79d4c2a0df6761a0e7da2676"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a3765e92c79d4c2a0df6761a0e7da2676">densmatr_mixDepolarising</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> depolLevel)</td></tr>
<tr class="separator:a3765e92c79d4c2a0df6761a0e7da2676"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab987904f721746d1176aba7ac6b566fa"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ab987904f721746d1176aba7ac6b566fa">densmatr_mixKrausMap</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int target, <a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> *ops, int numOps)</td></tr>
<tr class="separator:ab987904f721746d1176aba7ac6b566fa"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a99702f4667c429969d7e7b4ecd45c2f3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a99702f4667c429969d7e7b4ecd45c2f3">densmatr_mixMultiQubitKrausMap</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int *targets, int numTargets, <a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> *ops, int numOps)</td></tr>
<tr class="separator:a99702f4667c429969d7e7b4ecd45c2f3"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a74c14b1c46d838f5bf2bed1d5cf63271"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a74c14b1c46d838f5bf2bed1d5cf63271">densmatr_mixPauli</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int qubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> pX, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> pY, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> pZ)</td></tr>
<tr class="separator:a74c14b1c46d838f5bf2bed1d5cf63271"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a5090b080392ab9be8fcf538161d4e5c1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a5090b080392ab9be8fcf538161d4e5c1">densmatr_mixTwoQubitDephasing</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int qubit1, const int qubit2, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> dephase)</td></tr>
<tr class="separator:a5090b080392ab9be8fcf538161d4e5c1"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a43afa97e300b87bce7f3eb1213eb05f6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a43afa97e300b87bce7f3eb1213eb05f6">densmatr_mixTwoQubitDepolarising</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int qubit1, int qubit2, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> depolLevel)</td></tr>
<tr class="separator:a43afa97e300b87bce7f3eb1213eb05f6"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab004038b5f906ea897621c88bf213129"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ab004038b5f906ea897621c88bf213129">densmatr_mixTwoQubitKrausMap</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int target1, int target2, <a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> *ops, int numOps)</td></tr>
<tr class="separator:ab004038b5f906ea897621c88bf213129"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ac8ea84dd85eca525daeeb30b3c96b673"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ac8ea84dd85eca525daeeb30b3c96b673">ensureIndsIncrease</a> (int *ind1, int *ind2)</td></tr>
<tr class="separator:ac8ea84dd85eca525daeeb30b3c96b673"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a73300e3cdca56a7615980274905ba097"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a73300e3cdca56a7615980274905ba097">getComplexPairAndPhaseFromUnitary</a> (<a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> u, <a class="el" href="structComplex.html">Complex</a> *alpha, <a class="el" href="structComplex.html">Complex</a> *beta, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *globalPhase)</td></tr>
<tr class="memdesc:a73300e3cdca56a7615980274905ba097"><td class="mdescLeft"> </td><td class="mdescRight">maps U(r0c0, r0c1, r1c0, r1c1) to exp(i globalPhase) U(alpha, beta) <a href="QuEST__internal_8h.html#a73300e3cdca56a7615980274905ba097">More...</a><br /></td></tr>
<tr class="separator:a73300e3cdca56a7615980274905ba097"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a71b3ae4402c1c5039d3086ca0e47a522"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a71b3ae4402c1c5039d3086ca0e47a522">getComplexPairFromRotation</a> (<a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle, <a class="el" href="structVector.html">Vector</a> axis, <a class="el" href="structComplex.html">Complex</a> *alpha, <a class="el" href="structComplex.html">Complex</a> *beta)</td></tr>
<tr class="separator:a71b3ae4402c1c5039d3086ca0e47a522"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ad34d98eeaa6a3cb45e92c696cfd2d1c8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ad34d98eeaa6a3cb45e92c696cfd2d1c8">getConjugateMatrix2</a> (<a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> src)</td></tr>
<tr class="separator:ad34d98eeaa6a3cb45e92c696cfd2d1c8"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a20d45e85dd49dd3bf6045990b590b24b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a20d45e85dd49dd3bf6045990b590b24b">getConjugateMatrix4</a> (<a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> src)</td></tr>
<tr class="separator:a20d45e85dd49dd3bf6045990b590b24b"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af92fa737f4491324408b3d15543dced4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structComplex.html">Complex</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#af92fa737f4491324408b3d15543dced4">getConjugateScalar</a> (<a class="el" href="structComplex.html">Complex</a> scalar)</td></tr>
<tr class="separator:af92fa737f4491324408b3d15543dced4"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a1da0adad40d2bb1b30b04eda3598e18d"><td class="memItemLeft" align="right" valign="top">long long int </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a1da0adad40d2bb1b30b04eda3598e18d">getControlFlipMask</a> (int *controlQubits, int *controlState, const int numControlQubits)</td></tr>
<tr class="separator:a1da0adad40d2bb1b30b04eda3598e18d"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a377b203267735a5946ec28df28fc3340"><td class="memItemLeft" align="right" valign="top">long long int </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a377b203267735a5946ec28df28fc3340">getQubitBitMask</a> (int *controlQubits, const int numControlQubits)</td></tr>
<tr class="separator:a377b203267735a5946ec28df28fc3340"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a2b323b65cd6512720e6aa27c182fcea0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a2b323b65cd6512720e6aa27c182fcea0">getQuESTDefaultSeedKey</a> (unsigned long int *key)</td></tr>
<tr class="separator:a2b323b65cd6512720e6aa27c182fcea0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a3cf54148e2162b04aeb634badb90826c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a3cf54148e2162b04aeb634badb90826c">getVectorMagnitude</a> (<a class="el" href="structVector.html">Vector</a> vec)</td></tr>
<tr class="separator:a3cf54148e2162b04aeb634badb90826c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a404d177b894ce008289e44a599ad77d6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a404d177b894ce008289e44a599ad77d6">getZYZRotAnglesFromComplexPair</a> (<a class="el" href="structComplex.html">Complex</a> alpha, <a class="el" href="structComplex.html">Complex</a> beta, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *rz2, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *ry, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *rz1)</td></tr>
<tr class="memdesc:a404d177b894ce008289e44a599ad77d6"><td class="mdescLeft"> </td><td class="mdescRight">maps U(alpha, beta) to Rz(rz2) Ry(ry) Rz(rz1) <a href="QuEST__internal_8h.html#a404d177b894ce008289e44a599ad77d6">More...</a><br /></td></tr>
<tr class="separator:a404d177b894ce008289e44a599ad77d6"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab76254cfde16f0808476649507a1a2fc"><td class="memItemLeft" align="right" valign="top">unsigned long int </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ab76254cfde16f0808476649507a1a2fc">hashString</a> (char *str)</td></tr>
<tr class="separator:ab76254cfde16f0808476649507a1a2fc"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a9fd917537204e074119d4f283dea78e3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a9fd917537204e074119d4f283dea78e3">setConjugateMatrixN</a> (<a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> m)</td></tr>
<tr class="separator:a9fd917537204e074119d4f283dea78e3"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:acf1c651a4359a370a2d9b3e1e1ebd430"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#acf1c651a4359a370a2d9b3e1e1ebd430">shiftIndices</a> (int *indices, int numIndices, int shift)</td></tr>
<tr class="separator:acf1c651a4359a370a2d9b3e1e1ebd430"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af71c2470694795a8d639be8ff9c34ed5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#af71c2470694795a8d639be8ff9c34ed5">statevec_applyPauliSum</a> (<a class="el" href="structQureg.html">Qureg</a> inQureg, enum <a class="el" href="group__type.html#ga1c703cf89629e4e9c7023cd402d67028">pauliOpType</a> *allCodes, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *termCoeffs, int numSumTerms, <a class="el" href="structQureg.html">Qureg</a> outQureg)</td></tr>
<tr class="separator:af71c2470694795a8d639be8ff9c34ed5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aef380928d1b0003411d6159ca6594cd5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aef380928d1b0003411d6159ca6594cd5">statevec_calcExpecPauliProd</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int *targetQubits, enum <a class="el" href="group__type.html#ga1c703cf89629e4e9c7023cd402d67028">pauliOpType</a> *pauliCodes, int numTargets, <a class="el" href="structQureg.html">Qureg</a> workspace)</td></tr>
<tr class="separator:aef380928d1b0003411d6159ca6594cd5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ae0cfea24091c8336146aa84c2253992e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ae0cfea24091c8336146aa84c2253992e">statevec_calcExpecPauliSum</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, enum <a class="el" href="group__type.html#ga1c703cf89629e4e9c7023cd402d67028">pauliOpType</a> *allCodes, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *termCoeffs, int numSumTerms, <a class="el" href="structQureg.html">Qureg</a> workspace)</td></tr>
<tr class="separator:ae0cfea24091c8336146aa84c2253992e"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aeeec9fe1501e25930adf6c38763a158e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aeeec9fe1501e25930adf6c38763a158e">statevec_calcFidelity</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, <a class="el" href="structQureg.html">Qureg</a> pureState)</td></tr>
<tr class="separator:aeeec9fe1501e25930adf6c38763a158e"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a7ebd3198a198f4cd20840f64fd8b84d0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structComplex.html">Complex</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a7ebd3198a198f4cd20840f64fd8b84d0">statevec_calcInnerProduct</a> (<a class="el" href="structQureg.html">Qureg</a> bra, <a class="el" href="structQureg.html">Qureg</a> ket)</td></tr>
<tr class="memdesc:a7ebd3198a198f4cd20840f64fd8b84d0"><td class="mdescLeft"> </td><td class="mdescRight">Terrible code which unnecessarily individually computes and sums the real and imaginary components of the inner product, so as to not have to worry about keeping the sums separated during reduction. <a href="QuEST__internal_8h.html#a7ebd3198a198f4cd20840f64fd8b84d0">More...</a><br /></td></tr>
<tr class="separator:a7ebd3198a198f4cd20840f64fd8b84d0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab33cdf01831c4545e51299178acf7f27"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ab33cdf01831c4545e51299178acf7f27">statevec_calcProbOfOutcome</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int measureQubit, int outcome)</td></tr>
<tr class="separator:ab33cdf01831c4545e51299178acf7f27"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ad65ad1b5ea6f30b0c6b4ffda96e1a8e6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ad65ad1b5ea6f30b0c6b4ffda96e1a8e6">statevec_calcTotalProb</a> (<a class="el" href="structQureg.html">Qureg</a> qureg)</td></tr>
<tr class="separator:ad65ad1b5ea6f30b0c6b4ffda96e1a8e6"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aa4b77089145184d990848cd66993aa8b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aa4b77089145184d990848cd66993aa8b">statevec_cloneQureg</a> (<a class="el" href="structQureg.html">Qureg</a> targetQureg, <a class="el" href="structQureg.html">Qureg</a> copyQureg)</td></tr>
<tr class="memdesc:aa4b77089145184d990848cd66993aa8b"><td class="mdescLeft"> </td><td class="mdescRight">works for both statevectors and density matrices <a href="QuEST__internal_8h.html#aa4b77089145184d990848cd66993aa8b">More...</a><br /></td></tr>
<tr class="separator:aa4b77089145184d990848cd66993aa8b"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ae7f25bb40734e18a992403b17355893b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ae7f25bb40734e18a992403b17355893b">statevec_collapseToKnownProbOutcome</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int measureQubit, int outcome, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> outcomeProb)</td></tr>
<tr class="separator:ae7f25bb40734e18a992403b17355893b"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a94ee4df9faba286ad7a5bc829ef5174d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a94ee4df9faba286ad7a5bc829ef5174d">statevec_compactUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit, <a class="el" href="structComplex.html">Complex</a> alpha, <a class="el" href="structComplex.html">Complex</a> beta)</td></tr>
<tr class="separator:a94ee4df9faba286ad7a5bc829ef5174d"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ae6cecbad32a03416138b321cdc1a2c33"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ae6cecbad32a03416138b321cdc1a2c33">statevec_compareStates</a> (<a class="el" href="structQureg.html">Qureg</a> mq1, <a class="el" href="structQureg.html">Qureg</a> mq2, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> precision)</td></tr>
<tr class="separator:ae6cecbad32a03416138b321cdc1a2c33"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a47b467a5445c7f15d1a8b0b2ec0ef2de"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a47b467a5445c7f15d1a8b0b2ec0ef2de">statevec_controlledCompactUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int controlQubit, const int targetQubit, <a class="el" href="structComplex.html">Complex</a> alpha, <a class="el" href="structComplex.html">Complex</a> beta)</td></tr>
<tr class="separator:a47b467a5445c7f15d1a8b0b2ec0ef2de"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af81e1960029f6f213bc2edacaf0dcb44"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#af81e1960029f6f213bc2edacaf0dcb44">statevec_controlledMultiQubitUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int ctrl, int *targets, const int numTargets, <a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> u)</td></tr>
<tr class="separator:af81e1960029f6f213bc2edacaf0dcb44"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a114038296eb404b9b8a66aaad7b48800"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a114038296eb404b9b8a66aaad7b48800">statevec_controlledNot</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int controlQubit, const int targetQubit)</td></tr>
<tr class="separator:a114038296eb404b9b8a66aaad7b48800"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a708246b16236c492094c2633da0c08ff"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a708246b16236c492094c2633da0c08ff">statevec_controlledPauliY</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int controlQubit, const int targetQubit)</td></tr>
<tr class="separator:a708246b16236c492094c2633da0c08ff"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a9e647339720bf82b30c6331fad544ec5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a9e647339720bf82b30c6331fad544ec5">statevec_controlledPauliYConj</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int controlQubit, const int targetQubit)</td></tr>
<tr class="separator:a9e647339720bf82b30c6331fad544ec5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a7c0067cb9f243ead20de7392aea328bc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a7c0067cb9f243ead20de7392aea328bc">statevec_controlledPhaseFlip</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int idQubit1, const int idQubit2)</td></tr>
<tr class="separator:a7c0067cb9f243ead20de7392aea328bc"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:adeb715f3f2c167f9bfbe92b75f5988ce"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#adeb715f3f2c167f9bfbe92b75f5988ce">statevec_controlledPhaseShift</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int idQubit1, const int idQubit2, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:adeb715f3f2c167f9bfbe92b75f5988ce"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a2c489375aad6fb71203553c60bff043b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a2c489375aad6fb71203553c60bff043b">statevec_controlledRotateAroundAxis</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int controlQubit, const int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle, <a class="el" href="structVector.html">Vector</a> axis)</td></tr>
<tr class="separator:a2c489375aad6fb71203553c60bff043b"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aeb4ddeb09a3c0fa39ac33984bd5ca0ea"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aeb4ddeb09a3c0fa39ac33984bd5ca0ea">statevec_controlledRotateAroundAxisConj</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int controlQubit, const int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle, <a class="el" href="structVector.html">Vector</a> axis)</td></tr>
<tr class="separator:aeb4ddeb09a3c0fa39ac33984bd5ca0ea"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af59bc61f97d42cdceaf7fc0257a387d6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#af59bc61f97d42cdceaf7fc0257a387d6">statevec_controlledRotateX</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int controlQubit, const int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:af59bc61f97d42cdceaf7fc0257a387d6"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ad2dc0754043172e0449c78569d27fd4a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ad2dc0754043172e0449c78569d27fd4a">statevec_controlledRotateY</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int controlQubit, const int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:ad2dc0754043172e0449c78569d27fd4a"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a06bffb653fa42a67254d034b6cce6d7d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a06bffb653fa42a67254d034b6cce6d7d">statevec_controlledRotateZ</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int controlQubit, const int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:a06bffb653fa42a67254d034b6cce6d7d"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aaa550b31c5576f9305f57cfe68b6dfbe"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aaa550b31c5576f9305f57cfe68b6dfbe">statevec_controlledTwoQubitUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int controlQubit, const int targetQubit1, const int targetQubit2, <a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> u)</td></tr>
<tr class="separator:aaa550b31c5576f9305f57cfe68b6dfbe"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a2600999a19c817bfcf7ca14779e33b9a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a2600999a19c817bfcf7ca14779e33b9a">statevec_controlledUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int controlQubit, const int targetQubit, <a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> u)</td></tr>
<tr class="separator:a2600999a19c817bfcf7ca14779e33b9a"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a365bbb1b80cb00405c8bf1a4fa1ea8e5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a365bbb1b80cb00405c8bf1a4fa1ea8e5">statevec_createQureg</a> (<a class="el" href="structQureg.html">Qureg</a> *qureg, int numQubits, <a class="el" href="structQuESTEnv.html">QuESTEnv</a> env)</td></tr>
<tr class="separator:a365bbb1b80cb00405c8bf1a4fa1ea8e5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a2a52ad9f9ad9b2fd6a76f6d433b3b217"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a2a52ad9f9ad9b2fd6a76f6d433b3b217">statevec_destroyQureg</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, <a class="el" href="structQuESTEnv.html">QuESTEnv</a> env)</td></tr>
<tr class="separator:a2a52ad9f9ad9b2fd6a76f6d433b3b217"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:abd509244d57657e148e4084c5ab5d28f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#abd509244d57657e148e4084c5ab5d28f">statevec_getImagAmp</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int index)</td></tr>
<tr class="separator:abd509244d57657e148e4084c5ab5d28f"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a3afe58e49dce5536bc4c1b7caddf44a6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a3afe58e49dce5536bc4c1b7caddf44a6">statevec_getProbAmp</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int index)</td></tr>
<tr class="separator:a3afe58e49dce5536bc4c1b7caddf44a6"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:abc9a9ef4344c7faaaf28ac25c76649b9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#abc9a9ef4344c7faaaf28ac25c76649b9">statevec_getRealAmp</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int index)</td></tr>
<tr class="separator:abc9a9ef4344c7faaaf28ac25c76649b9"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a9226f386d010aaa85efc0e8889d341d5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a9226f386d010aaa85efc0e8889d341d5">statevec_hadamard</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit)</td></tr>
<tr class="separator:a9226f386d010aaa85efc0e8889d341d5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a758bad4237ff0bf3b4ff5be626a982ae"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a758bad4237ff0bf3b4ff5be626a982ae">statevec_initBlankState</a> (<a class="el" href="structQureg.html">Qureg</a> qureg)</td></tr>
<tr class="separator:a758bad4237ff0bf3b4ff5be626a982ae"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a288dc4b46bdacd69cbf4a6fd070d26a7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a288dc4b46bdacd69cbf4a6fd070d26a7">statevec_initClassicalState</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int stateInd)</td></tr>
<tr class="separator:a288dc4b46bdacd69cbf4a6fd070d26a7"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ad9fd3017ea40cf63fd04b39e03494972"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ad9fd3017ea40cf63fd04b39e03494972">statevec_initDebugState</a> (<a class="el" href="structQureg.html">Qureg</a> qureg)</td></tr>
<tr class="memdesc:ad9fd3017ea40cf63fd04b39e03494972"><td class="mdescLeft"> </td><td class="mdescRight">Initialise the state vector of probability amplitudes to an (unphysical) state with each component of each probability amplitude a unique floating point value. <a href="QuEST__internal_8h.html#ad9fd3017ea40cf63fd04b39e03494972">More...</a><br /></td></tr>
<tr class="separator:ad9fd3017ea40cf63fd04b39e03494972"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a482fc361fd5f08075404c72e536316a0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a482fc361fd5f08075404c72e536316a0">statevec_initPlusState</a> (<a class="el" href="structQureg.html">Qureg</a> qureg)</td></tr>
<tr class="separator:a482fc361fd5f08075404c72e536316a0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a05756b45f10135bb2eeb07380f806c20"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a05756b45f10135bb2eeb07380f806c20">statevec_initStateFromSingleFile</a> (<a class="el" href="structQureg.html">Qureg</a> *qureg, char filename[200], <a class="el" href="structQuESTEnv.html">QuESTEnv</a> env)</td></tr>
<tr class="separator:a05756b45f10135bb2eeb07380f806c20"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a923906770cac0da9e3459bae58de9e64"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a923906770cac0da9e3459bae58de9e64">statevec_initStateOfSingleQubit</a> (<a class="el" href="structQureg.html">Qureg</a> *qureg, int qubitId, int outcome)</td></tr>
<tr class="memdesc:a923906770cac0da9e3459bae58de9e64"><td class="mdescLeft"> </td><td class="mdescRight">Initialise the state vector of probability amplitudes such that one qubit is set to 'outcome' and all other qubits are in an equal superposition of zero and one. <a href="QuEST__internal_8h.html#a923906770cac0da9e3459bae58de9e64">More...</a><br /></td></tr>
<tr class="separator:a923906770cac0da9e3459bae58de9e64"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a2ca0c6ba07ab2b4b437321bf17efc966"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a2ca0c6ba07ab2b4b437321bf17efc966">statevec_initZeroState</a> (<a class="el" href="structQureg.html">Qureg</a> qureg)</td></tr>
<tr class="separator:a2ca0c6ba07ab2b4b437321bf17efc966"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ac2eb81c71d0e0fbec7be5b45b1db1448"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ac2eb81c71d0e0fbec7be5b45b1db1448">statevec_measureWithStats</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int measureQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *outcomeProb)</td></tr>
<tr class="separator:ac2eb81c71d0e0fbec7be5b45b1db1448"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a47dcab9a0e6b07ddde264ed924add26c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a47dcab9a0e6b07ddde264ed924add26c">statevec_multiControlledMultiQubitUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int ctrlMask, int *targs, const int numTargs, <a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> u)</td></tr>
<tr class="memdesc:a47dcab9a0e6b07ddde264ed924add26c"><td class="mdescLeft"> </td><td class="mdescRight">This calls swapQubitAmps only when it would involve a distributed communication; if the qubit chunks already fit in the node, it operates the unitary direct. <a href="QuEST__internal_8h.html#a47dcab9a0e6b07ddde264ed924add26c">More...</a><br /></td></tr>
<tr class="separator:a47dcab9a0e6b07ddde264ed924add26c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ac4ee5979d475e8c729294b8ef7e0270d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ac4ee5979d475e8c729294b8ef7e0270d">statevec_multiControlledPhaseFlip</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int *controlQubits, int numControlQubits)</td></tr>
<tr class="separator:ac4ee5979d475e8c729294b8ef7e0270d"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aa662796ea6e0f471143c53becae8c12c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aa662796ea6e0f471143c53becae8c12c">statevec_multiControlledPhaseShift</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int *controlQubits, int numControlQubits, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:aa662796ea6e0f471143c53becae8c12c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a877d988a763a52989484afc0f8d6ddf0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a877d988a763a52989484afc0f8d6ddf0">statevec_multiControlledTwoQubitUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int ctrlMask, const int targetQubit1, const int targetQubit2, <a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> u)</td></tr>
<tr class="memdesc:a877d988a763a52989484afc0f8d6ddf0"><td class="mdescLeft"> </td><td class="mdescRight">This calls swapQubitAmps only when it would involve a distributed communication; if the qubit chunks already fit in the node, it operates the unitary direct. <a href="QuEST__internal_8h.html#a877d988a763a52989484afc0f8d6ddf0">More...</a><br /></td></tr>
<tr class="separator:a877d988a763a52989484afc0f8d6ddf0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a7ec46b4b96cda399095a2488ceff69b6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a7ec46b4b96cda399095a2488ceff69b6">statevec_multiControlledUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int ctrlQubitsMask, long long int ctrlFlipMask, const int targetQubit, <a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> u)</td></tr>
<tr class="separator:a7ec46b4b96cda399095a2488ceff69b6"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ad92b16763f97e70c052eb87a5d1fd3e9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ad92b16763f97e70c052eb87a5d1fd3e9">statevec_multiQubitUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int *targets, const int numTargets, <a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> u)</td></tr>
<tr class="separator:ad92b16763f97e70c052eb87a5d1fd3e9"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a2153d8611247dd3a2ef483355265cc99"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a2153d8611247dd3a2ef483355265cc99">statevec_multiRotatePauli</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int *targetQubits, enum <a class="el" href="group__type.html#ga1c703cf89629e4e9c7023cd402d67028">pauliOpType</a> *targetPaulis, int numTargets, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle, int applyConj)</td></tr>
<tr class="memdesc:a2153d8611247dd3a2ef483355265cc99"><td class="mdescLeft"> </td><td class="mdescRight">applyConj=1 will apply conjugate operation, else applyConj=0 <a href="QuEST__internal_8h.html#a2153d8611247dd3a2ef483355265cc99">More...</a><br /></td></tr>
<tr class="separator:a2153d8611247dd3a2ef483355265cc99"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a8d88b4ed94ab024e5e7b2f1f4f505b44"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a8d88b4ed94ab024e5e7b2f1f4f505b44">statevec_multiRotateZ</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int mask, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:a8d88b4ed94ab024e5e7b2f1f4f505b44"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:abdb6e0ee1e407755e1b944086cedd90e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#abdb6e0ee1e407755e1b944086cedd90e">statevec_pauliX</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit)</td></tr>
<tr class="separator:abdb6e0ee1e407755e1b944086cedd90e"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a73b56fbac6e464a37805fa9d9657a8f9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a73b56fbac6e464a37805fa9d9657a8f9">statevec_pauliY</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit)</td></tr>
<tr class="separator:a73b56fbac6e464a37805fa9d9657a8f9"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aee97816cfabeea7874cd837a8d105412"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aee97816cfabeea7874cd837a8d105412">statevec_pauliYConj</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit)</td></tr>
<tr class="separator:aee97816cfabeea7874cd837a8d105412"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ad711cac41adb0fea1ad4797ce14953e0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ad711cac41adb0fea1ad4797ce14953e0">statevec_pauliZ</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit)</td></tr>
<tr class="separator:ad711cac41adb0fea1ad4797ce14953e0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a37bcd16fc0bbc8e665585ba9b99f382b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a37bcd16fc0bbc8e665585ba9b99f382b">statevec_phaseShift</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:a37bcd16fc0bbc8e665585ba9b99f382b"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a8972669148af60d7e1c09687f69673d4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a8972669148af60d7e1c09687f69673d4">statevec_phaseShiftByTerm</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit, <a class="el" href="structComplex.html">Complex</a> term)</td></tr>
<tr class="separator:a8972669148af60d7e1c09687f69673d4"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a1e57230c7995447039e62a84c0a36524"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a1e57230c7995447039e62a84c0a36524">statevec_reportStateToScreen</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, <a class="el" href="structQuESTEnv.html">QuESTEnv</a> env, int reportRank)</td></tr>
<tr class="memdesc:a1e57230c7995447039e62a84c0a36524"><td class="mdescLeft"> </td><td class="mdescRight">Print the current state vector of probability amplitudes for a set of qubits to standard out. <a href="QuEST__internal_8h.html#a1e57230c7995447039e62a84c0a36524">More...</a><br /></td></tr>
<tr class="separator:a1e57230c7995447039e62a84c0a36524"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a65b9087ca37c096caa5c6e8586b67946"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a65b9087ca37c096caa5c6e8586b67946">statevec_rotateAroundAxis</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int rotQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle, <a class="el" href="structVector.html">Vector</a> axis)</td></tr>
<tr class="separator:a65b9087ca37c096caa5c6e8586b67946"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af9839c40de8df0cecc72a0258a20d979"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#af9839c40de8df0cecc72a0258a20d979">statevec_rotateAroundAxisConj</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int rotQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle, <a class="el" href="structVector.html">Vector</a> axis)</td></tr>
<tr class="separator:af9839c40de8df0cecc72a0258a20d979"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aca123cc22e13a2cb819ef6c2f455b9e4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aca123cc22e13a2cb819ef6c2f455b9e4">statevec_rotateX</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int rotQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:aca123cc22e13a2cb819ef6c2f455b9e4"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a4a62c8c00dc4adf74b982ad8a9049170"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a4a62c8c00dc4adf74b982ad8a9049170">statevec_rotateY</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int rotQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:a4a62c8c00dc4adf74b982ad8a9049170"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab96ee09e32e297629a481c3ba6d7eaf7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ab96ee09e32e297629a481c3ba6d7eaf7">statevec_rotateZ</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int rotQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:ab96ee09e32e297629a481c3ba6d7eaf7"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aa121d55f2ca09c06a96ddcd433c60b0f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aa121d55f2ca09c06a96ddcd433c60b0f">statevec_setAmps</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int startInd, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *reals, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *imags, long long int numAmps)</td></tr>
<tr class="separator:aa121d55f2ca09c06a96ddcd433c60b0f"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ad64a23933361fafc1b6b1787759c2663"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ad64a23933361fafc1b6b1787759c2663">statevec_setWeightedQureg</a> (<a class="el" href="structComplex.html">Complex</a> fac1, <a class="el" href="structQureg.html">Qureg</a> qureg1, <a class="el" href="structComplex.html">Complex</a> fac2, <a class="el" href="structQureg.html">Qureg</a> qureg2, <a class="el" href="structComplex.html">Complex</a> facOut, <a class="el" href="structQureg.html">Qureg</a> out)</td></tr>
<tr class="separator:ad64a23933361fafc1b6b1787759c2663"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aea5b9ea10791217a793a8040c36e4efc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aea5b9ea10791217a793a8040c36e4efc">statevec_sGate</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit)</td></tr>
<tr class="separator:aea5b9ea10791217a793a8040c36e4efc"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a78bfeb90f0c1812e726ec3092056bb52"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a78bfeb90f0c1812e726ec3092056bb52">statevec_sGateConj</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit)</td></tr>
<tr class="separator:a78bfeb90f0c1812e726ec3092056bb52"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a6550462400942be61b171c8840b36aa1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a6550462400942be61b171c8840b36aa1">statevec_sqrtSwapGate</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int qb1, int qb2)</td></tr>
<tr class="separator:a6550462400942be61b171c8840b36aa1"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a33cde9b6518d55a544eff20301a5d844"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a33cde9b6518d55a544eff20301a5d844">statevec_sqrtSwapGateConj</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int qb1, int qb2)</td></tr>
<tr class="separator:a33cde9b6518d55a544eff20301a5d844"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab7478fcaf6357ab202d72853b672e375"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int qb1, int qb2)</td></tr>
<tr class="separator:ab7478fcaf6357ab202d72853b672e375"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a0bd738cb7e7cdea8f1ce1e640d427d4c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a0bd738cb7e7cdea8f1ce1e640d427d4c">statevec_tGate</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit)</td></tr>
<tr class="separator:a0bd738cb7e7cdea8f1ce1e640d427d4c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a3ce1b05fee70d930791513fec378d229"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a3ce1b05fee70d930791513fec378d229">statevec_tGateConj</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit)</td></tr>
<tr class="separator:a3ce1b05fee70d930791513fec378d229"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aa8db9b25aae536cdf8054afb6503b7f4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aa8db9b25aae536cdf8054afb6503b7f4">statevec_twoQubitUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit1, const int targetQubit2, <a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> u)</td></tr>
<tr class="separator:aa8db9b25aae536cdf8054afb6503b7f4"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a4bea7ed7967083cbabd8a8e5acdd48c0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a4bea7ed7967083cbabd8a8e5acdd48c0">statevec_unitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, const int targetQubit, <a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> u)</td></tr>
<tr class="separator:a4bea7ed7967083cbabd8a8e5acdd48c0"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>General functions used internally, supplied by QuEST_common or by hardware-specific backends. Note that some bespoke functions used only internally exist in <a class="el" href="QuEST__qasm_8h.html">QuEST_qasm.h</a> and <a class="el" href="QuEST__validation_8h.html">QuEST_validation.h</a></p>
<dl class="section author"><dt>Author</dt><dd>Ania Brown (statevecs, original architecture) </dd>
<dd>
Tyson Jones (re-architecture, statevecs, density matrices) </dd></dl>
<p class="definition">Definition in file <a class="el" href="QuEST__internal_8h_source.html">QuEST_internal.h</a>.</p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="ab17aea39cda8080d9f614bf737154f57"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab17aea39cda8080d9f614bf737154f57">◆ </a></span>conjugateMatrixN()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void conjugateMatrixN </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> </td>
<td class="paramname"><em>u</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="aa6c3f86010ad398f42b0577ea3bb5bcf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa6c3f86010ad398f42b0577ea3bb5bcf">◆ </a></span>densmatr_calcFidelity()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> densmatr_calcFidelity </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>pureState</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00415">415</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  {</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  </div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="comment">// set qureg's pairState is to be the full pureState (on every node)</span></div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a95af772d87c461fc8abfd6d47b752ac2">copyVecIntoMatrixPairState</a>(qureg, pureState);</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  </div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="comment">// collect calcFidelityLocal by every machine</span></div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> localSum = <a class="code" href="QuEST__cpu_8c.html#a7772f97cb4d92a9825bf3b7c82c3230c">densmatr_calcFidelityLocal</a>(qureg, pureState);</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  </div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="comment">// sum each localSum</span></div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> globalSum;</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  MPI_Allreduce(&localSum, &globalSum, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  </div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">return</span> globalSum;</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l01751">copySharedReduceBlock()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00371">copyVecIntoMatrixPairState()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00989">densmatr_calcFidelityLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00186">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00165">Qureg::numQubitsRepresented</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00019">REDUCE_SHARED_SIZE</a>, <a class="el" href="QuEST_8h_source.html#l00186">Qureg::secondLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, and <a class="el" href="QuEST__gpu_8cu_source.html#l01857">swapDouble()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00861">calcFidelity()</a>.</p>
</div>
</div>
<a id="a8c9da88f734b0862f4cce7d819e6d3b5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8c9da88f734b0862f4cce7d819e6d3b5">◆ </a></span>densmatr_calcHilbertSchmidtDistance()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> densmatr_calcHilbertSchmidtDistance </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>b</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00430">430</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  {</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  </div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> localSum = <a class="code" href="QuEST__cpu_8c.html#a939897137596bb73ad7a028d0beaaa10">densmatr_calcHilbertSchmidtDistanceSquaredLocal</a>(a, b);</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  </div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> globalSum;</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  MPI_Allreduce(&localSum, &globalSum, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  </div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> dist = sqrt(globalSum);</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordflow">return</span> dist;</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l01751">copySharedReduceBlock()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00922">densmatr_calcHilbertSchmidtDistanceSquaredLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00186">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00019">REDUCE_SHARED_SIZE</a>, <a class="el" href="QuEST_8h_source.html#l00186">Qureg::secondLevelReduction</a>, and <a class="el" href="QuEST__gpu_8cu_source.html#l01857">swapDouble()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00889">calcHilbertSchmidtDistance()</a>.</p>
</div>
</div>
<a id="a6ff3dc624b5fafe8edae4fe327c255a0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ff3dc624b5fafe8edae4fe327c255a0">◆ </a></span>densmatr_calcInnerProduct()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> densmatr_calcInnerProduct </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>b</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00441">441</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  {</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  </div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> localSum = <a class="code" href="QuEST__cpu_8c.html#a08392b1b27d10e3b8a8648a5afeaa629">densmatr_calcInnerProductLocal</a>(a, b);</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  </div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> globalSum;</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  MPI_Allreduce(&localSum, &globalSum, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  </div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> dist = globalSum;</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">return</span> dist;</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l01751">copySharedReduceBlock()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00957">densmatr_calcInnerProductLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00186">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00172">Qureg::numAmpsTotal</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00019">REDUCE_SHARED_SIZE</a>, <a class="el" href="QuEST_8h_source.html#l00186">Qureg::secondLevelReduction</a>, and <a class="el" href="QuEST__gpu_8cu_source.html#l01857">swapDouble()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00837">calcDensityInnerProduct()</a>.</p>
</div>
</div>
<a id="ad405e3fac20997043e0236b751e44270"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad405e3fac20997043e0236b751e44270">◆ </a></span>densmatr_calcProbOfOutcome()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> densmatr_calcProbOfOutcome </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>measureQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>outcome</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01279">1279</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  {</div>
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  </div>
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> zeroProb = <a class="code" href="QuEST__cpu_8c.html#a101e7ef38c5d654a697dafe14562dcee">densmatr_findProbabilityOfZeroLocal</a>(qureg, measureQubit);</div>
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  </div>
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> outcomeProb;</div>
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  MPI_Allreduce(&zeroProb, &outcomeProb, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  <span class="keywordflow">if</span> (outcome == 1)</div>
<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  outcomeProb = 1.0 - outcomeProb;</div>
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  </div>
<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>  <span class="keywordflow">return</span> outcomeProb;</div>
<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l01864">densmatr_findProbabilityOfZero()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03111">densmatr_findProbabilityOfZeroLocal()</a>, and <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00845">calcProbOfOutcome()</a>, <a class="el" href="QuEST_8c_source.html#l00724">collapseToOutcome()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00368">densmatr_measureWithStats()</a>.</p>
</div>
</div>
<a id="ae45eefa65f4ecd37bab84fade7cf7f1f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae45eefa65f4ecd37bab84fade7cf7f1f">◆ </a></span>densmatr_calcPurity()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> densmatr_calcPurity </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Computes the trace of the density matrix squared. </p>
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01291">1291</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  {</div>
<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>  </div>
<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> localPurity = <a class="code" href="QuEST__cpu_8c.html#af910c7cf2b85bdc2c399cfe8dbfb8b9c">densmatr_calcPurityLocal</a>(qureg);</div>
<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>  </div>
<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> globalPurity;</div>
<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  MPI_Allreduce(&localPurity, &globalPurity, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>  </div>
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>  <span class="keywordflow">return</span> globalPurity;</div>
<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l01751">copySharedReduceBlock()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00860">densmatr_calcPurityLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00186">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00019">REDUCE_SHARED_SIZE</a>, <a class="el" href="QuEST_8h_source.html#l00186">Qureg::secondLevelReduction</a>, and <a class="el" href="QuEST__gpu_8cu_source.html#l01857">swapDouble()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00855">calcPurity()</a>.</p>
</div>
</div>
<a id="a6153547f245c05874161a105e9a2f02c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6153547f245c05874161a105e9a2f02c">◆ </a></span>densmatr_calcTotalProb()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> densmatr_calcTotalProb </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00053">53</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="comment">// computes the trace by summing every element ("diag") with global index (2^n + 1)i for i in [0, 2^n-1]</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="comment">// computes first local index containing a diagonal element</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> diagSpacing = 1LL + (1LL << qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> numPrevDiags = (qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>>0)? 1+(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>*qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>)/diagSpacing : 0;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> globalIndNextDiag = diagSpacing * numPrevDiags;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> localIndNextDiag = globalIndNextDiag % qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> rankTotal = 0;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> y, t, c;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  c = 0;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// iterates every local diagonal</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">for</span> (index=localIndNextDiag; index < qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>; index += diagSpacing) {</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  </div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="comment">// Kahan summation - brackets are important</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  y = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real[index] - c;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  t = rankTotal + y;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  c = ( t - rankTotal ) - y;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  rankTotal = t;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="comment">// combine each node's sum of diagonals</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> globalTotal;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a> > 1)</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  MPI_Allreduce(&rankTotal, &globalTotal, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  globalTotal = rankTotal;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">return</span> globalTotal;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00407">copyStateFromGPU()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00176">Qureg::numChunks</a>, <a class="el" href="QuEST_8h_source.html#l00165">Qureg::numQubitsRepresented</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00822">calcTotalProb()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00464">statevec_calcExpecPauliProd()</a>.</p>
</div>
</div>
<a id="ab321af37fe3490253e12b7c70b8d2a98"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab321af37fe3490253e12b7c70b8d2a98">◆ </a></span>densmatr_collapseToKnownProbOutcome()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_collapseToKnownProbOutcome </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>measureQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>outcome</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>outcomeProb</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Renorms (/prob) every | * outcome * >< * outcome * | state, setting all others to zero. </p>
<p>Renorms (/prob) every | * outcome * >< * outcome * | state, setting all others to zero. </p>
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l00784">784</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  {</div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  </div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <span class="comment">// only (global) indices (as bit sequence): '* outcome *(n+q) outcome *q are spared</span></div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <span class="comment">// where n = measureQubit, q = qureg.numQubitsRepresented.</span></div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <span class="comment">// We can thus step in blocks of 2^q+n, killing every second, and inside the others,</span></div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <span class="comment">// stepping in sub-blocks of 2^q, killing every second.</span></div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <span class="comment">// When outcome=1, we offset the start of these blocks by their size.</span></div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> innerBlockSize = (1LL << measureQubit);</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> outerBlockSize = (1LL << (measureQubit + qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>));</div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  </div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="comment">// Because there are 2^a number of nodes(/chunks), each node will contain 2^b number of blocks,</span></div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="comment">// or each block will span 2^c number of nodes. Similarly for the innerblocks.</span></div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> locNumAmps = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> globalStartInd = qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a> * locNumAmps;</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="keywordtype">int</span> innerBit = <a class="code" href="QuEST__gpu_8cu.html#a5cb8662afc6c644a46f7339c89bfd226">extractBit</a>(measureQubit, globalStartInd);</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <span class="keywordtype">int</span> outerBit = <a class="code" href="QuEST__gpu_8cu.html#a5cb8662afc6c644a46f7339c89bfd226">extractBit</a>(measureQubit + qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>, globalStartInd);</div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  </div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="comment">// If this chunk's amps are entirely inside an outer block</span></div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keywordflow">if</span> (locNumAmps <= outerBlockSize) {</div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  </div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="comment">// if this is an undesired outer block, kill all elems</span></div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <span class="keywordflow">if</span> (outerBit != outcome)</div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keywordflow">return</span> <a class="code" href="QuEST__cpu_8c.html#ac5168399122f7f53977dcc9ceda4f458">zeroSomeAmps</a>(qureg, 0, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>);</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  </div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="comment">// othwerwise, if this is a desired outer block, and also entirely an inner block</span></div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordflow">if</span> (locNumAmps <= innerBlockSize) {</div>
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  </div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <span class="comment">// and that inner block is undesired, kill all elems</span></div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keywordflow">if</span> (innerBit != outcome)</div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="keywordflow">return</span> <a class="code" href="QuEST__cpu_8c.html#ac5168399122f7f53977dcc9ceda4f458">zeroSomeAmps</a>(qureg, 0, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>);</div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="comment">// otherwise normalise all elems</span></div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="keywordflow">return</span> <a class="code" href="QuEST__cpu_8c.html#a031a99b7e97779f3dc782feffe86e779">normaliseSomeAmps</a>(qureg, totalStateProb, 0, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>);</div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  }</div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  </div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="comment">// otherwise this is a desired outer block which contains 2^a inner blocks; kill/renorm every second inner block</span></div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="keywordflow">return</span> <a class="code" href="QuEST__cpu_8c.html#a0abdff5f6065f9d57065345e6d90fc94">alternateNormZeroingSomeAmpBlocks</a>(</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  qureg, totalStateProb, innerBit==outcome, 0, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, innerBlockSize);</div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  }</div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  </div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="comment">// Otherwise, this chunk's amps contain multiple outer blocks (and hence multiple inner blocks)</span></div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> numOuterDoubleBlocks = locNumAmps / (2*outerBlockSize);</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> firstBlockInd;</div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  </div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <span class="comment">// alternate norming* and zeroing the outer blocks (with order based on the desired outcome)</span></div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <span class="comment">// These loops aren't parallelised, since they could have 1 or 2 iterations and will prevent</span></div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="comment">// inner parallelisation</span></div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="keywordflow">if</span> (outerBit == outcome) {</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  </div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="keywordflow">for</span> (<span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> outerDubBlockInd = 0; outerDubBlockInd < numOuterDoubleBlocks; outerDubBlockInd++) {</div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  firstBlockInd = outerDubBlockInd*2*outerBlockSize;</div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  </div>
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <span class="comment">// *norm only the desired inner blocks in the desired outer block</span></div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <a class="code" href="QuEST__cpu_8c.html#a0abdff5f6065f9d57065345e6d90fc94">alternateNormZeroingSomeAmpBlocks</a>(</div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  qureg, totalStateProb, innerBit==outcome, </div>
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  firstBlockInd, outerBlockSize, innerBlockSize);</div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  </div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <span class="comment">// zero the undesired outer block</span></div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <a class="code" href="QuEST__cpu_8c.html#ac5168399122f7f53977dcc9ceda4f458">zeroSomeAmps</a>(qureg, firstBlockInd + outerBlockSize, outerBlockSize);</div>
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  }</div>
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  </div>
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  </div>
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keywordflow">for</span> (<span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> outerDubBlockInd = 0; outerDubBlockInd < numOuterDoubleBlocks; outerDubBlockInd++) {</div>
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  firstBlockInd = outerDubBlockInd*2*outerBlockSize;</div>
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  </div>
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <span class="comment">// same thing but undesired outer blocks come first</span></div>
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <a class="code" href="QuEST__cpu_8c.html#ac5168399122f7f53977dcc9ceda4f458">zeroSomeAmps</a>(qureg, firstBlockInd, outerBlockSize);</div>
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <a class="code" href="QuEST__cpu_8c.html#a0abdff5f6065f9d57065345e6d90fc94">alternateNormZeroingSomeAmpBlocks</a>(</div>
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  qureg, totalStateProb, innerBit==outcome, </div>
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  firstBlockInd + outerBlockSize, outerBlockSize, innerBlockSize);</div>
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  }</div>
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  }</div>
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  </div>
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu_8c_source.html#l00753">alternateNormZeroingSomeAmpBlocks()</a>, <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00082">extractBit()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00743">normaliseSomeAmps()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00165">Qureg::numQubitsRepresented</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l00733">zeroSomeAmps()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00724">collapseToOutcome()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00368">densmatr_measureWithStats()</a>.</p>
</div>
</div>
<a id="a20a155f53efc45c16803d7539c2c199d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a20a155f53efc45c16803d7539c2c199d">◆ </a></span>densmatr_initClassicalState()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_initClassicalState </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int </td>
<td class="paramname"><em>stateInd</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01114">1114</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> {</div>
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> densityNumElems = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  </div>
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *densityReal = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *densityImag = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  </div>
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <span class="comment">// initialise the state to all zeros</span></div>
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="preprocessor"> shared (densityNumElems, densityReal, densityImag) \</span></div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  {</div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="keywordflow">for</span> (index=0; index<densityNumElems; index++) {</div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  densityReal[index] = 0.0;</div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  densityImag[index] = 0.0;</div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  }</div>
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  }</div>
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  </div>
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <span class="comment">// index of the single density matrix elem to set non-zero</span></div>
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> densityDim = 1LL << qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>;</div>
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> densityInd = (densityDim + 1)*stateInd;</div>
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  </div>
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="comment">// give the specified classical state prob 1</span></div>
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a> == densityInd / densityNumElems){</div>
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  densityReal[densityInd % densityNumElems] = 1.0;</div>
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  densityImag[densityInd % densityNumElems] = 0.0;</div>
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  }</div>
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00165">Qureg::numQubitsRepresented</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00132">initClassicalState()</a>.</p>
</div>
</div>
<a id="a2418bd9a6b9e6a0acf11faf5982d5d29"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2418bd9a6b9e6a0acf11faf5982d5d29">◆ </a></span>densmatr_initPlusState()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_initPlusState </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>targetQureg</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01153">1153</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> {</div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  <span class="comment">// |+><+| = sum_i 1/sqrt(2^N) |i> 1/sqrt(2^N) <j| = sum_ij 1/2^N |i><j|</span></div>
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> dim = (1LL << qureg.numQubitsRepresented);</div>
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> probFactor = 1.0/((<a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>) dim);</div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  </div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *densityReal = qureg.stateVec.real;</div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *densityImag = qureg.stateVec.imag;</div>
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  </div>
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize = qureg.numAmpsPerChunk;</div>
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  <span class="comment">// initialise the state to |+++..+++> = 1/normFactor {1, 1, 1, ...}</span></div>
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="preprocessor"> shared (chunkSize, densityReal, densityImag, probFactor) \</span></div>
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  {</div>
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <span class="keywordflow">for</span> (index=0; index<chunkSize; index++) {</div>
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  densityReal[index] = probFactor;</div>
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  densityImag[index] = 0.0;</div>
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  }</div>
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  }</div>
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00165">Qureg::numQubitsRepresented</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00123">initPlusState()</a>.</p>
</div>
</div>
<a id="ae5ad68d054875913d0f7ec654840a9ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae5ad68d054875913d0f7ec654840a9ec">◆ </a></span>densmatr_initPureState()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_initPureState </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>targetQureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>copyQureg</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00452">452</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  {</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  </div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">if</span> (targetQureg.<a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a>==1){</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="comment">// local version</span></div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="comment">// save pointers to qureg's pair state</span></div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* quregPairRePtr = targetQureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.real;</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* quregPairImPtr = targetQureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.imag;</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  </div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="comment">// populate qureg pair state with pure state (by repointing)</span></div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  targetQureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.real = copyQureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  targetQureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.imag = copyQureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  </div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="comment">// populate density matrix via it's pairState</span></div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <a class="code" href="QuEST__cpu_8c.html#a1b36518c8fbbc3a5084bb4ad1fb05ea5">densmatr_initPureStateLocal</a>(targetQureg, copyQureg);</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  </div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="comment">// restore pointers</span></div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  targetQureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.real = quregPairRePtr;</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  targetQureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.imag = quregPairImPtr;</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="comment">// set qureg's pairState is to be the full pure state (on every node)</span></div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a95af772d87c461fc8abfd6d47b752ac2">copyVecIntoMatrixPairState</a>(targetQureg, copyQureg);</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  </div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="comment">// update every density matrix chunk using pairState</span></div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <a class="code" href="QuEST__cpu_8c.html#a1b36518c8fbbc3a5084bb4ad1fb05ea5">densmatr_initPureStateLocal</a>(targetQureg, copyQureg);</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  }</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00371">copyVecIntoMatrixPairState()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l01183">densmatr_initPureStateLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00176">Qureg::numChunks</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00143">initPureState()</a>.</p>
</div>
</div>
<a id="ae4ebc1f4dd48922bfb30ad1692310269"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae4ebc1f4dd48922bfb30ad1692310269">◆ </a></span>densmatr_measureWithStats()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int densmatr_measureWithStats </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>measureQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> * </td>
<td class="paramname"><em>outcomeProb</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00368">368</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  {</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  </div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> zeroProb = <a class="code" href="QuEST__internal_8h.html#ad405e3fac20997043e0236b751e44270">densmatr_calcProbOfOutcome</a>(qureg, measureQubit, 0);</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordtype">int</span> outcome = <a class="code" href="QuEST__common_8c.html#a9d19fc690afb425d0df5feb09be567a3">generateMeasurementOutcome</a>(zeroProb, outcomeProb);</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <a class="code" href="QuEST__internal_8h.html#ab321af37fe3490253e12b7c70b8d2a98">densmatr_collapseToKnownProbOutcome</a>(qureg, measureQubit, outcome, *outcomeProb);</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordflow">return</span> outcome;</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01279">densmatr_calcProbOfOutcome()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00784">densmatr_collapseToKnownProbOutcome()</a>, <a class="el" href="QuEST__common_8c_source.html#l00154">generateMeasurementOutcome()</a>, and <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00756">measure()</a>, and <a class="el" href="QuEST_8c_source.html#l00743">measureWithStats()</a>.</p>
</div>
</div>
<a id="a72b26b971531dbdc64de20501f368545"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a72b26b971531dbdc64de20501f368545">◆ </a></span>densmatr_mixDamping()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_mixDamping </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>damping</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00727">727</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  {</div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">if</span> (damping == 0)</div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  </div>
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="keywordtype">int</span> rankIsUpper; <span class="comment">// rank is in the upper half of an outer block</span></div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  </div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keywordtype">int</span> useLocalDataOnly = <a class="code" href="QuEST__cpu__distributed_8c.html#a076fe6125da4d6037b8bc4d912df4015">densityMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, </div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>, targetQubit);</div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  </div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <a class="code" href="QuEST__cpu_8c.html#a7cc805451304b8ad4429c7107f90ab3b">densmatr_mixDampingLocal</a>(qureg, targetQubit, damping);</div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="comment">// pack data to send to my pair process into the first half of pairStateVec</span></div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a2ebf115d3bdd88f4b290b5218a5399d3">compressPairVectorForSingleQubitDepolarise</a>(qureg, targetQubit);</div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  </div>
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  rankIsUpper = <a class="code" href="QuEST__cpu__distributed_8c.html#aa3c2d644a2be7f0d3aa9f757527d306f">chunkIsUpperInOuterBlock</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit, </div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#ae66dc6569c6e4008c33d6739db422c08">getChunkOuterBlockPairId</a>(rankIsUpper, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, </div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  targetQubit, qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  </div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a>(qureg, pairRank);</div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <a class="code" href="QuEST__cpu_8c.html#a28d2a35fde2952211f5898a76275d93d">densmatr_mixDampingDistributed</a>(qureg, targetQubit, damping);</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  }</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  </div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00236">chunkIsUpperInOuterBlock()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00545">compressPairVectorForSingleQubitDepolarise()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00363">densityMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00299">densmatr_mixDampingDistributed()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00174">densmatr_mixDampingLocal()</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l02554">densmatr_oneQubitDegradeOffDiagonal()</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00511">exchangePairStateVectorHalves()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00314">getChunkOuterBlockPairId()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00165">Qureg::numQubitsRepresented</a>, and <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00935">mixDamping()</a>.</p>
</div>
</div>
<a id="a8adaba9dbdad6f7ab41ae4b8db0abefe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8adaba9dbdad6f7ab41ae4b8db0abefe">◆ </a></span>densmatr_mixDensityMatrix()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_mixDensityMatrix </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>combineQureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>otherProb</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>otherQureg</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l00889">889</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  {</div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  </div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  <span class="comment">/* corresponding amplitudes live on the same node (same dimensions) */</span></div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  </div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  <span class="comment">// unpack vars for OpenMP</span></div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* combineVecRe = combineQureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* combineVecIm = combineQureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* otherVecRe = otherQureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* otherVecIm = otherQureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> numAmps = combineQureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  </div>
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="preprocessor"> shared (combineVecRe,combineVecIm,otherVecRe,otherVecIm, otherProb, numAmps) \</span></div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="preprocessor"> private (index)</span></div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="preprocessor"># endif </span></div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  {</div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  <span class="keywordflow">for</span> (index=0; index < numAmps; index++) {</div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  combineVecRe[index] *= 1-otherProb;</div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  combineVecIm[index] *= 1-otherProb;</div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  </div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  combineVecRe[index] += otherProb * otherVecRe[index];</div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  combineVecIm[index] += otherProb * otherVecIm[index];</div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  }</div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  }</div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00770">mixDensityMatrix()</a>.</p>
</div>
</div>
<a id="a515b6a920b1715d4eae25dcf29f39b95"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a515b6a920b1715d4eae25dcf29f39b95">◆ </a></span>densmatr_mixDephasing()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_mixDephasing </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>dephase</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l00079">79</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  {</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> retain=1-dephase;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="QuEST__cpu_8c.html#a4b578690aa76d1e9cac9dc964d713f38">densmatr_oneQubitDegradeOffDiagonal</a>(qureg, targetQubit, retain);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu_8c_source.html#l00048">densmatr_oneQubitDegradeOffDiagonal()</a>, and <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__gpu_8cu_source.html#l02697">densmatr_mixDepolarising()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00224">densmatr_mixDepolarisingDistributed()</a>, and <a class="el" href="QuEST_8c_source.html#l00902">mixDephasing()</a>.</p>
</div>
</div>
<a id="a3765e92c79d4c2a0df6761a0e7da2676"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3765e92c79d4c2a0df6761a0e7da2676">◆ </a></span>densmatr_mixDepolarising()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_mixDepolarising </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>depolLevel</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00700">700</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  {</div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <span class="keywordflow">if</span> (depolLevel == 0)</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  </div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordtype">int</span> rankIsUpper; <span class="comment">// rank is in the upper half of an outer block</span></div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  </div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keywordtype">int</span> useLocalDataOnly = <a class="code" href="QuEST__cpu__distributed_8c.html#a076fe6125da4d6037b8bc4d912df4015">densityMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, </div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>, targetQubit);</div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  </div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <a class="code" href="QuEST__cpu_8c.html#a1807899a1c39506427433739562670ec">densmatr_mixDepolarisingLocal</a>(qureg, targetQubit, depolLevel);</div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <span class="comment">// pack data to send to my pair process into the first half of pairStateVec</span></div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a2ebf115d3bdd88f4b290b5218a5399d3">compressPairVectorForSingleQubitDepolarise</a>(qureg, targetQubit);</div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  </div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  rankIsUpper = <a class="code" href="QuEST__cpu__distributed_8c.html#aa3c2d644a2be7f0d3aa9f757527d306f">chunkIsUpperInOuterBlock</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit, </div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#ae66dc6569c6e4008c33d6739db422c08">getChunkOuterBlockPairId</a>(rankIsUpper, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, </div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  targetQubit, qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  </div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a>(qureg, pairRank);</div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <a class="code" href="QuEST__cpu_8c.html#acc485aea8dccf1678f80fa9c5df6724a">densmatr_mixDepolarisingDistributed</a>(qureg, targetQubit, depolLevel);</div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  }</div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  </div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00236">chunkIsUpperInOuterBlock()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00545">compressPairVectorForSingleQubitDepolarise()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00363">densityMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l02574">densmatr_mixDephasing()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00224">densmatr_mixDepolarisingDistributed()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00125">densmatr_mixDepolarisingLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00511">exchangePairStateVectorHalves()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00314">getChunkOuterBlockPairId()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00165">Qureg::numQubitsRepresented</a>, and <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00924">mixDepolarising()</a>.</p>
</div>
</div>
<a id="ab987904f721746d1176aba7ac6b566fa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab987904f721746d1176aba7ac6b566fa">◆ </a></span>densmatr_mixKrausMap()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_mixKrausMap </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>target</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> * </td>
<td class="paramname"><em>ops</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numOps</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00599">599</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  {</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  </div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <a class="code" href="structComplexMatrix4.html">ComplexMatrix4</a> superOp; </div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <a class="code" href="QuEST__common_8c.html#abd00ba1321c9bd43c3a9119f5b3ed1be">populateKrausSuperOperator2</a>(&superOp, ops, numOps);</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <a class="code" href="QuEST__common_8c.html#af3db21114efc431ae7a7ae06fc2d7b5b">densmatr_applyKrausSuperoperator</a>(qureg, target, superOp);</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00575">densmatr_applyKrausSuperoperator()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00562">populateKrausSuperOperator2()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00675">densmatr_mixPauli()</a>, and <a class="el" href="QuEST_8c_source.html#l00966">mixKrausMap()</a>.</p>
</div>
</div>
<a id="a99702f4667c429969d7e7b4ecd45c2f3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a99702f4667c429969d7e7b4ecd45c2f3">◆ </a></span>densmatr_mixMultiQubitKrausMap()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_mixMultiQubitKrausMap </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>targets</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numTargets</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> * </td>
<td class="paramname"><em>ops</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numOps</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00642">642</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  {</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  </div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <a class="code" href="structComplexMatrixN.html">ComplexMatrixN</a> superOp;</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  </div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="comment">/* superOp will contain 2^(4 numTargets) complex numbers.</span></div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="comment"> * At double precision, superOp will cost additional memory:</span></div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="comment"> * numTargs=1 -> 0.25 KiB</span></div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="comment"> * numTargs=2 -> 4 KiB </span></div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="comment"> * numTargs=3 -> 64 KiB</span></div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="comment"> * numTargs=4 -> 1 MiB</span></div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="comment"> * numTargs=5 -> 16 MiB.</span></div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="comment"> * At quad precision (usually 10 B per number, but possibly 16 B due to alignment),</span></div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="comment"> * this costs at most double.</span></div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="comment"> * Hence, if superOp is kept in the stack, numTargs >= 4 would exceed Windows' 1 MB </span></div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="comment"> * maximum stack-space allocation (numTargs >= 5 exceeding Linux' 8 MB). Therefore, </span></div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="comment"> * for numTargets < 4, superOp will be kept in the stack, else in the heap</span></div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="comment"> */</span></div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  </div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keywordflow">if</span> (numTargets < 4) {</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="comment">// everything must live in 'if' since this macro declares local vars</span></div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <a class="code" href="QuEST__common_8c.html#a4da103b16292ffd99197d05c5fa83712">macro_allocStackComplexMatrixN</a>(superOp, 2*numTargets);</div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <a class="code" href="QuEST__common_8c.html#a6dcb85ef8e1257813af0dc306082caf8">populateKrausSuperOperatorN</a>(&superOp, ops, numOps);</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <a class="code" href="QuEST__common_8c.html#a514ca44595676abf4bc2e10fc48ef970">densmatr_applyMultiQubitKrausSuperoperator</a>(qureg, targets, numTargets, superOp);</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  }</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  superOp = <a class="code" href="group__type.html#ga815103261fb22ea9690e1427571df00e">createComplexMatrixN</a>(2*numTargets);</div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <a class="code" href="QuEST__common_8c.html#a6dcb85ef8e1257813af0dc306082caf8">populateKrausSuperOperatorN</a>(&superOp, ops, numOps);</div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <a class="code" href="QuEST__common_8c.html#a514ca44595676abf4bc2e10fc48ef970">densmatr_applyMultiQubitKrausSuperoperator</a>(qureg, targets, numTargets, superOp);</div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <a class="code" href="group__type.html#ga9df2f3d86be4a6e9aad481665e5e6753">destroyComplexMatrixN</a>(superOp);</div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  }</div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8c_source.html#l01000">createComplexMatrixN()</a>, <a class="el" href="QuEST__common_8c_source.html#l00589">densmatr_applyMultiQubitKrausSuperoperator()</a>, <a class="el" href="QuEST_8c_source.html#l01021">destroyComplexMatrixN()</a>, <a class="el" href="QuEST__common_8c_source.html#l00628">macro_allocStackComplexMatrixN</a>, and <a class="el" href="QuEST__common_8c_source.html#l00570">populateKrausSuperOperatorN()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00986">mixMultiQubitKrausMap()</a>.</p>
</div>
</div>
<a id="a74c14b1c46d838f5bf2bed1d5cf63271"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a74c14b1c46d838f5bf2bed1d5cf63271">◆ </a></span>densmatr_mixPauli()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_mixPauli </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>qubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>pX</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>pY</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>pZ</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00675">675</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  {</div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  </div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="comment">// convert pauli probabilities into Kraus map</span></div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> numOps = 4;</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <a class="code" href="structComplexMatrix2.html">ComplexMatrix2</a> ops[numOps];</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n=0; n < numOps; n++)</div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  ops[n] = (<a class="code" href="structComplexMatrix2.html">ComplexMatrix2</a>) {.<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>={{0}}, .imag={{0}}};</div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  </div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> facs[4] = { <span class="comment">// literal numOps=4 for valid initialisation</span></div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  sqrt(1-(probX + probY + probZ)),</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  sqrt(probX),</div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  sqrt(probY),</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  sqrt(probZ)</div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  };</div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  ops[0].<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>[0][0] = facs[0]; ops[0].<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>[1][1] = facs[0];</div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  ops[1].<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>[0][1] = facs[1]; ops[1].<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>[1][0] = facs[1];</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  ops[2].<a class="code" href="structComplexMatrix2.html#a3a2b60a9e00ccef054a6de3b9307c1be">imag</a>[0][1] = -facs[2]; ops[2].<a class="code" href="structComplexMatrix2.html#a3a2b60a9e00ccef054a6de3b9307c1be">imag</a>[1][0] = facs[2];</div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  ops[3].<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>[0][0] = facs[3]; ops[3].<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>[1][1] = -facs[3];</div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  </div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <a class="code" href="QuEST__common_8c.html#ab987904f721746d1176aba7ac6b566fa">densmatr_mixKrausMap</a>(qureg, qubit, ops, numOps);</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00599">densmatr_mixKrausMap()</a>, <a class="el" href="QuEST_8h_source.html#l00117">ComplexMatrix2::imag</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00116">ComplexMatrix2::real</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00955">mixPauli()</a>.</p>
</div>
</div>
<a id="a5090b080392ab9be8fcf538161d4e5c1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5090b080392ab9be8fcf538161d4e5c1">◆ </a></span>densmatr_mixTwoQubitDephasing()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_mixTwoQubitDephasing </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>qubit1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>qubit2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>dephase</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l00084">84</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> retain=1-dephase;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> numTasks = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> innerMaskQubit1 = 1LL << qubit1;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> outerMaskQubit1 = 1LL << (qubit1 + (qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>));</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> innerMaskQubit2 = 1LL << qubit2;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> outerMaskQubit2 = 1LL << (qubit2 + (qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>));</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> totMaskQubit1 = innerMaskQubit1|outerMaskQubit1;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> totMaskQubit2 = innerMaskQubit2|outerMaskQubit2;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  </div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> thisTask;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> thisPatternQubit1, thisPatternQubit2;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  </div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor"> shared (innerMaskQubit1,outerMaskQubit1,totMaskQubit1,innerMaskQubit2,outerMaskQubit2, \</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor"> totMaskQubit2,qureg,retain) \</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor"> private (thisTask,thisPatternQubit1,thisPatternQubit2) </span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">for</span> (thisTask=0; thisTask<numTasks; thisTask++){</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  thisPatternQubit1 = (thisTask+qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>*qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>)&totMaskQubit1;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  thisPatternQubit2 = (thisTask+qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>*qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>)&totMaskQubit2;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  </div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="comment">// any mismatch |...0...><...1...| etc</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> ( (thisPatternQubit1==innerMaskQubit1) || (thisPatternQubit1==outerMaskQubit1) || </div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  (thisPatternQubit2==innerMaskQubit2) || (thisPatternQubit2==outerMaskQubit2) ){ </div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="comment">// do dephase</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="comment">// the lines below will degrade the off-diagonal terms |..0..><..1..| and |..1..><..0..|</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real[thisTask] = retain*qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real[thisTask]; </div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag[thisTask] = retain*qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag[thisTask]; </div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  } </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  } </div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00165">Qureg::numQubitsRepresented</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00754">densmatr_mixTwoQubitDepolarising()</a>, and <a class="el" href="QuEST_8c_source.html#l00912">mixTwoQubitDephasing()</a>.</p>
</div>
</div>
<a id="a43afa97e300b87bce7f3eb1213eb05f6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a43afa97e300b87bce7f3eb1213eb05f6">◆ </a></span>densmatr_mixTwoQubitDepolarising()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_mixTwoQubitDepolarising </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>qubit1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>qubit2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>depolLevel</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00754">754</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  {</div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <span class="keywordflow">if</span> (depolLevel == 0)</div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <span class="keywordtype">int</span> rankIsUpperBiggerQubit, rankIsUpperSmallerQubit;</div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <span class="keywordtype">int</span> biggerQubit, smallerQubit;</div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  </div>
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <a class="code" href="QuEST__internal_8h.html#a5090b080392ab9be8fcf538161d4e5c1">densmatr_mixTwoQubitDephasing</a>(qureg, qubit1, qubit2, depolLevel);</div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  </div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> eta = 2/depolLevel;</div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> delta = eta - 1 - sqrt( (eta-1)*(eta-1) - 1 ); </div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> gamma = 1+delta;</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  gamma = 1/(gamma*gamma*gamma);</div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <span class="keyword">const</span> <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> GAMMA_PARTS_1_OR_2 = 1.0;</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="comment">// TODO -- test delta too small</span></div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  <span class="comment">/* </span></div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="comment"> if (fabs(4*delta*(1+delta)*gamma-depolLevel)>1e-5){</span></div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="comment"> printf("Numerical error in delta; for small error rates try Taylor expansion.\n");</span></div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="comment"> exit(1);</span></div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="comment"> }</span></div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="comment"> */</span></div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  </div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  biggerQubit = qubit1 > qubit2 ? qubit1 : qubit2;</div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  smallerQubit = qubit1 < qubit2 ? qubit1 : qubit2;</div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  <span class="keywordtype">int</span> useLocalDataOnlyBigQubit, useLocalDataOnlySmallQubit;</div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  </div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  useLocalDataOnlyBigQubit = <a class="code" href="QuEST__cpu__distributed_8c.html#a076fe6125da4d6037b8bc4d912df4015">densityMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, </div>
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>, biggerQubit);</div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keywordflow">if</span> (useLocalDataOnlyBigQubit){</div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="comment">// does parts 1, 2 and 3 locally in one go</span></div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <a class="code" href="QuEST__cpu_8c.html#a3510f01d4d15dcc545564eb84c668cad">densmatr_mixTwoQubitDepolarisingLocal</a>(qureg, qubit1, qubit2, delta, gamma);</div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  useLocalDataOnlySmallQubit = <a class="code" href="QuEST__cpu__distributed_8c.html#a076fe6125da4d6037b8bc4d912df4015">densityMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, </div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>, smallerQubit);</div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <span class="keywordflow">if</span> (useLocalDataOnlySmallQubit){</div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <span class="comment">// do part 1 locally</span></div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <a class="code" href="QuEST__cpu_8c.html#ae90f82418e0aa67218d733dbbc681998">densmatr_mixTwoQubitDepolarisingLocalPart1</a>(qureg, smallerQubit, biggerQubit, delta);</div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  </div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="comment">// do parts 2 and 3 distributed (if part 2 is distributed part 3 is also distributed)</span></div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <span class="comment">// part 2 will be distributed and the value of the small qubit won't matter</span></div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a13a7c39357ba9a30339d7a6171aeda8d">compressPairVectorForTwoQubitDepolarise</a>(qureg, smallerQubit, biggerQubit);</div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  rankIsUpperBiggerQubit = <a class="code" href="QuEST__cpu__distributed_8c.html#aa3c2d644a2be7f0d3aa9f757527d306f">chunkIsUpperInOuterBlock</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, biggerQubit, </div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#ae66dc6569c6e4008c33d6739db422c08">getChunkOuterBlockPairId</a>(rankIsUpperBiggerQubit, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, </div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  biggerQubit, qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  </div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a>(qureg, pairRank);</div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <a class="code" href="QuEST__cpu_8c.html#ac497197e66d7024fc6bf7ace120b3de5">densmatr_mixTwoQubitDepolarisingDistributed</a>(qureg, smallerQubit, biggerQubit, delta, GAMMA_PARTS_1_OR_2);</div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  </div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  <span class="comment">// part 3 will be distributed but involve rearranging for the smaller qubit</span></div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a13a7c39357ba9a30339d7a6171aeda8d">compressPairVectorForTwoQubitDepolarise</a>(qureg, smallerQubit, biggerQubit);</div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  rankIsUpperBiggerQubit = <a class="code" href="QuEST__cpu__distributed_8c.html#aa3c2d644a2be7f0d3aa9f757527d306f">chunkIsUpperInOuterBlock</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, biggerQubit, </div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#ae66dc6569c6e4008c33d6739db422c08">getChunkOuterBlockPairId</a>(rankIsUpperBiggerQubit, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, </div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  biggerQubit, qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  </div>
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a>(qureg, pairRank);</div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <a class="code" href="QuEST__cpu_8c.html#af82f6c9317f51a2048ddd3eb24c2959c">densmatr_mixTwoQubitDepolarisingQ1LocalQ2DistributedPart3</a>(qureg, smallerQubit, biggerQubit, delta, gamma);</div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="comment">// do part 1, 2 and 3 distributed</span></div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="comment">// part 1</span></div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a13a7c39357ba9a30339d7a6171aeda8d">compressPairVectorForTwoQubitDepolarise</a>(qureg, smallerQubit, biggerQubit);</div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  rankIsUpperSmallerQubit = <a class="code" href="QuEST__cpu__distributed_8c.html#aa3c2d644a2be7f0d3aa9f757527d306f">chunkIsUpperInOuterBlock</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, smallerQubit, </div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#ae66dc6569c6e4008c33d6739db422c08">getChunkOuterBlockPairId</a>(rankIsUpperSmallerQubit, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, </div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  smallerQubit, qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  </div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a>(qureg, pairRank);</div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <a class="code" href="QuEST__cpu_8c.html#ac497197e66d7024fc6bf7ace120b3de5">densmatr_mixTwoQubitDepolarisingDistributed</a>(qureg, smallerQubit, biggerQubit, delta, GAMMA_PARTS_1_OR_2);</div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  </div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="comment">// part 2</span></div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a13a7c39357ba9a30339d7a6171aeda8d">compressPairVectorForTwoQubitDepolarise</a>(qureg, smallerQubit, biggerQubit);</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  rankIsUpperBiggerQubit = <a class="code" href="QuEST__cpu__distributed_8c.html#aa3c2d644a2be7f0d3aa9f757527d306f">chunkIsUpperInOuterBlock</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, biggerQubit, </div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#ae66dc6569c6e4008c33d6739db422c08">getChunkOuterBlockPairId</a>(rankIsUpperBiggerQubit, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, </div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  biggerQubit, qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  </div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a>(qureg, pairRank);</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <a class="code" href="QuEST__cpu_8c.html#ac497197e66d7024fc6bf7ace120b3de5">densmatr_mixTwoQubitDepolarisingDistributed</a>(qureg, smallerQubit, biggerQubit, delta, GAMMA_PARTS_1_OR_2);</div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  </div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="comment">// part 3</span></div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a13a7c39357ba9a30339d7a6171aeda8d">compressPairVectorForTwoQubitDepolarise</a>(qureg, smallerQubit, biggerQubit);</div>
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#ab1ec7f241b68b079c8e316d190af49ce">getChunkOuterBlockPairIdForPart3</a>(rankIsUpperSmallerQubit, rankIsUpperBiggerQubit, </div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, smallerQubit, biggerQubit, qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a>(qureg, pairRank);</div>
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <a class="code" href="QuEST__cpu_8c.html#ac497197e66d7024fc6bf7ace120b3de5">densmatr_mixTwoQubitDepolarisingDistributed</a>(qureg, smallerQubit, biggerQubit, delta, gamma);</div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  </div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  }</div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  }</div>
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  </div>
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00236">chunkIsUpperInOuterBlock()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00611">compressPairVectorForTwoQubitDepolarise()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00363">densityMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00084">densmatr_mixTwoQubitDephasing()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00540">densmatr_mixTwoQubitDepolarisingDistributed()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00385">densmatr_mixTwoQubitDepolarisingLocal()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00487">densmatr_mixTwoQubitDepolarisingLocalPart1()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00631">densmatr_mixTwoQubitDepolarisingQ1LocalQ2DistributedPart3()</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00511">exchangePairStateVectorHalves()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00314">getChunkOuterBlockPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00325">getChunkOuterBlockPairIdForPart3()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00165">Qureg::numQubitsRepresented</a>, and <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00943">mixTwoQubitDepolarising()</a>.</p>
</div>
</div>
<a id="ab004038b5f906ea897621c88bf213129"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab004038b5f906ea897621c88bf213129">◆ </a></span>densmatr_mixTwoQubitKrausMap()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_mixTwoQubitKrausMap </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>target1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>target2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> * </td>
<td class="paramname"><em>ops</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numOps</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00634">634</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  {</div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  </div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <a class="code" href="structComplexMatrixN.html">ComplexMatrixN</a> superOp;</div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <a class="code" href="QuEST__common_8c.html#a4da103b16292ffd99197d05c5fa83712">macro_allocStackComplexMatrixN</a>(superOp, 4);</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <a class="code" href="QuEST__common_8c.html#a2a6999e47bed978eb66f589c8abc7766">populateKrausSuperOperator4</a>(&superOp, ops, numOps);</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  <a class="code" href="QuEST__common_8c.html#a3d39314af5d88822d4aefb5e9cc4e2f6">densmatr_applyTwoQubitKrausSuperoperator</a>(qureg, target1, target2, superOp);</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00581">densmatr_applyTwoQubitKrausSuperoperator()</a>, <a class="el" href="QuEST__common_8c_source.html#l00628">macro_allocStackComplexMatrixN</a>, and <a class="el" href="QuEST__common_8c_source.html#l00566">populateKrausSuperOperator4()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00976">mixTwoQubitKrausMap()</a>.</p>
</div>
</div>
<a id="ac8ea84dd85eca525daeeb30b3c96b673"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac8ea84dd85eca525daeeb30b3c96b673">◆ </a></span>ensureIndsIncrease()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ensureIndsIncrease </td>
<td>(</td>
<td class="paramtype">int * </td>
<td class="paramname"><em>ind1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>ind2</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00063">63</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">if</span> (*ind1 > *ind2) {</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordtype">int</span> copy = *ind1;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  *ind1 = *ind2;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  *ind2 = copy;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00912">mixTwoQubitDephasing()</a>, and <a class="el" href="QuEST_8c_source.html#l00943">mixTwoQubitDepolarising()</a>.</p>
</div>
</div>
<a id="a73300e3cdca56a7615980274905ba097"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a73300e3cdca56a7615980274905ba097">◆ </a></span>getComplexPairAndPhaseFromUnitary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void getComplexPairAndPhaseFromUnitary </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> </td>
<td class="paramname"><em>u</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> * </td>
<td class="paramname"><em>alpha</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> * </td>
<td class="paramname"><em>beta</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> * </td>
<td class="paramname"><em>globalPhase</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>maps U(r0c0, r0c1, r1c0, r1c1) to exp(i globalPhase) U(alpha, beta) </p>
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00135">135</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  </div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> r0c0Phase = atan2(u.<a class="code" href="structComplexMatrix2.html#a3a2b60a9e00ccef054a6de3b9307c1be">imag</a>[0][0], u.<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>[0][0]);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> r1c1Phase = atan2(u.<a class="code" href="structComplexMatrix2.html#a3a2b60a9e00ccef054a6de3b9307c1be">imag</a>[1][1], u.<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>[1][1]);</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  *globalPhase = (r0c0Phase + r1c1Phase)/2.0;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  </div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> cosPhase = cos(*globalPhase);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> sinPhase = sin(*globalPhase);</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  alpha-><a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = u.<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>[0][0]*cosPhase + u.<a class="code" href="structComplexMatrix2.html#a3a2b60a9e00ccef054a6de3b9307c1be">imag</a>[0][0]*sinPhase;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  alpha-><a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = u.<a class="code" href="structComplexMatrix2.html#a3a2b60a9e00ccef054a6de3b9307c1be">imag</a>[0][0]*cosPhase - u.<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>[0][0]*sinPhase;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  beta-><a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = u.<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>[1][0]*cosPhase + u.<a class="code" href="structComplexMatrix2.html#a3a2b60a9e00ccef054a6de3b9307c1be">imag</a>[1][0]*sinPhase;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  beta-><a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = u.<a class="code" href="structComplexMatrix2.html#a3a2b60a9e00ccef054a6de3b9307c1be">imag</a>[1][0]*cosPhase - u.<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>[1][0]*sinPhase;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00117">ComplexMatrix2::imag</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, and <a class="el" href="QuEST_8h_source.html#l00116">ComplexMatrix2::real</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__qasm_8c_source.html#l00278">qasm_recordControlledUnitary()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00341">qasm_recordMultiControlledUnitary()</a>, and <a class="el" href="QuEST__qasm_8c_source.html#l00207">qasm_recordUnitary()</a>.</p>
</div>
</div>
<a id="a71b3ae4402c1c5039d3086ca0e47a522"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a71b3ae4402c1c5039d3086ca0e47a522">◆ </a></span>getComplexPairFromRotation()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void getComplexPairFromRotation </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structVector.html">Vector</a> </td>
<td class="paramname"><em>axis</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> * </td>
<td class="paramname"><em>alpha</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> * </td>
<td class="paramname"><em>beta</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00113">113</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  {</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  </div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="structVector.html">Vector</a> unitAxis = <a class="code" href="QuEST__common_8c.html#a041bb75200ee316de7b90667a4fe04f3">getUnitVector</a>(axis);</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  alpha-><a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = cos(angle/2.0);</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  alpha-><a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = - sin(angle/2.0)*unitAxis.<a class="code" href="structVector.html#ab33976d8fda2e44b770f71269d698a25">z</a>; </div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  beta-><a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = sin(angle/2.0)*unitAxis.<a class="code" href="structVector.html#abc3cfc6c8e297b1153a373d84b981e6b">y</a>;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  beta-><a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = - sin(angle/2.0)*unitAxis.<a class="code" href="structVector.html#a0d0459a5b731ac5fb3dff2c6134e6e88">x</a>;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00077">getUnitVector()</a>, <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, <a class="el" href="QuEST_8h_source.html#l00150">Vector::x</a>, <a class="el" href="QuEST_8h_source.html#l00150">Vector::y</a>, and <a class="el" href="QuEST_8h_source.html#l00150">Vector::z</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__qasm_8c_source.html#l00223">qasm_recordAxisRotation()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00300">qasm_recordControlledAxisRotation()</a>, <a class="el" href="QuEST__common_8c_source.html#l00326">statevec_controlledRotateAroundAxis()</a>, <a class="el" href="QuEST__common_8c_source.html#l00333">statevec_controlledRotateAroundAxisConj()</a>, <a class="el" href="QuEST__common_8c_source.html#l00310">statevec_rotateAroundAxis()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00317">statevec_rotateAroundAxisConj()</a>.</p>
</div>
</div>
<a id="ad34d98eeaa6a3cb45e92c696cfd2d1c8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad34d98eeaa6a3cb45e92c696cfd2d1c8">◆ </a></span>getConjugateMatrix2()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> getConjugateMatrix2 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> </td>
<td class="paramname"><em>src</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00098">98</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="structComplexMatrix2.html">ComplexMatrix2</a> conj;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <a class="code" href="QuEST__common_8c.html#ae2b222fda52c10fb420cb3ac78ca31e4">macro_setConjugateMatrix</a>(conj, src, 2);</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">return</span> conj;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00092">macro_setConjugateMatrix</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00359">controlledUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00372">multiControlledUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00387">multiStateControlledUnitary()</a>, and <a class="el" href="QuEST_8c_source.html#l00347">unitary()</a>.</p>
</div>
</div>
<a id="a20d45e85dd49dd3bf6045990b590b24b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a20d45e85dd49dd3bf6045990b590b24b">◆ </a></span>getConjugateMatrix4()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> getConjugateMatrix4 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> </td>
<td class="paramname"><em>src</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00103">103</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  {</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="structComplexMatrix4.html">ComplexMatrix4</a> conj;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="QuEST__common_8c.html#ae2b222fda52c10fb420cb3ac78ca31e4">macro_setConjugateMatrix</a>(conj, src, 4);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">return</span> conj;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00092">macro_setConjugateMatrix</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00268">controlledTwoQubitUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00281">multiControlledTwoQubitUnitary()</a>, and <a class="el" href="QuEST_8c_source.html#l00255">twoQubitUnitary()</a>.</p>
</div>
</div>
<a id="af92fa737f4491324408b3d15543dced4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af92fa737f4491324408b3d15543dced4">◆ </a></span>getConjugateScalar()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structComplex.html">Complex</a> getConjugateScalar </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> </td>
<td class="paramname"><em>scalar</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00084">84</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  </div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="structComplex.html">Complex</a> conjScalar;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  conjScalar.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = scalar.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  conjScalar.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = - scalar.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a>;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">return</span> conjScalar;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, and <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00403">compactUnitary()</a>, and <a class="el" href="QuEST_8c_source.html#l00416">controlledCompactUnitary()</a>.</p>
</div>
</div>
<a id="a1da0adad40d2bb1b30b04eda3598e18d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1da0adad40d2bb1b30b04eda3598e18d">◆ </a></span>getControlFlipMask()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">long long int getControlFlipMask </td>
<td>(</td>
<td class="paramtype">int * </td>
<td class="paramname"><em>controlQubits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>controlState</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>numControlQubits</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00053">53</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  {</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> mask=0;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i<numControlQubits; i++)</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">if</span> (controlState[i] == 0)</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  mask = mask | (1LL << controlQubits[i]);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">return</span> mask;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00387">multiStateControlledUnitary()</a>.</p>
</div>
</div>
<a id="a377b203267735a5946ec28df28fc3340"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a377b203267735a5946ec28df28fc3340">◆ </a></span>getQubitBitMask()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">long long int getQubitBitMask </td>
<td>(</td>
<td class="paramtype">int * </td>
<td class="paramname"><em>controlQubits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>numControlQubits</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00043">43</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  {</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> mask=0; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i<numQubits; i++)</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  mask = mask | (1LL << qubits[i]);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> mask;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00329">multiControlledMultiQubitUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00281">multiControlledTwoQubitUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00372">multiControlledUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00624">multiRotateZ()</a>, <a class="el" href="QuEST_8c_source.html#l00387">multiStateControlledUnitary()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01441">statevec_multiControlledMultiQubitUnitary()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03291">statevec_multiControlledPhaseFlip()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03019">statevec_multiControlledPhaseShift()</a>, <a class="el" href="QuEST__common_8c_source.html#l00410">statevec_multiRotatePauli()</a>, and <a class="el" href="QuEST__validation_8c_source.html#l00366">validateMultiControlsMultiTargets()</a>.</p>
</div>
</div>
<a id="a2b323b65cd6512720e6aa27c182fcea0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2b323b65cd6512720e6aa27c182fcea0">◆ </a></span>getQuESTDefaultSeedKey()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void getQuESTDefaultSeedKey </td>
<td>(</td>
<td class="paramtype">unsigned long int * </td>
<td class="paramname"><em>key</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00181">181</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  {</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="comment">// init MT random number generator with two keys -- time and pid</span></div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="comment">// for the MPI version, it is ok that all procs will get the same seed as random numbers will only be </span></div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="comment">// used by the master process</span></div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor">#if defined(_WIN32) && ! defined(__MINGW32__)</span></div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  </div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> pid = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> int) _getpid();</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> msecs = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> int) GetTickCount64();</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  </div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  key[0] = msecs; key[1] = pid;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor">#else</span></div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keyword">struct </span>timeval tv;</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  gettimeofday(&tv, NULL);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  </div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordtype">double</span> time_in_mill =</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  (tv.tv_sec) * 1000 + (tv.tv_usec) / 1000 ; <span class="comment">// convert tv_sec & tv_usec to millisecond</span></div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  </div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> pid = getpid();</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> msecs = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> int) time_in_mill;</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  </div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  key[0] = msecs; key[1] = pid;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="preprocessor">#endif </span></div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01321">seedQuESTDefault()</a>.</p>
</div>
</div>
<a id="a3cf54148e2162b04aeb634badb90826c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3cf54148e2162b04aeb634badb90826c">◆ </a></span>getVectorMagnitude()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> getVectorMagnitude </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structVector.html">Vector</a> </td>
<td class="paramname"><em>vec</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00072">72</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> sqrt(vec.<a class="code" href="structVector.html#a0d0459a5b731ac5fb3dff2c6134e6e88">x</a>*vec.<a class="code" href="structVector.html#a0d0459a5b731ac5fb3dff2c6134e6e88">x</a> + vec.<a class="code" href="structVector.html#abc3cfc6c8e297b1153a373d84b981e6b">y</a>*vec.<a class="code" href="structVector.html#abc3cfc6c8e297b1153a373d84b981e6b">y</a> + vec.<a class="code" href="structVector.html#ab33976d8fda2e44b770f71269d698a25">z</a>*vec.<a class="code" href="structVector.html#ab33976d8fda2e44b770f71269d698a25">z</a>);</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00150">Vector::x</a>, <a class="el" href="QuEST_8h_source.html#l00150">Vector::y</a>, and <a class="el" href="QuEST_8h_source.html#l00150">Vector::z</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00077">getUnitVector()</a>, and <a class="el" href="QuEST__validation_8c_source.html#l00414">validateVector()</a>.</p>
</div>
</div>
<a id="a404d177b894ce008289e44a599ad77d6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a404d177b894ce008289e44a599ad77d6">◆ </a></span>getZYZRotAnglesFromComplexPair()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void getZYZRotAnglesFromComplexPair </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> </td>
<td class="paramname"><em>alpha</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> </td>
<td class="paramname"><em>beta</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> * </td>
<td class="paramname"><em>rz2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> * </td>
<td class="paramname"><em>ry</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> * </td>
<td class="paramname"><em>rz1</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>maps U(alpha, beta) to Rz(rz2) Ry(ry) Rz(rz1) </p>
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00123">123</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  </div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> alphaMag = sqrt(alpha.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>*alpha.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> + alpha.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a>*alpha.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a>);</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  *ry = 2.0 * acos(alphaMag);</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  </div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> alphaPhase = atan2(alpha.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a>, alpha.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>);</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> betaPhase = atan2(beta.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a>, beta.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>);</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  *rz2 = - alphaPhase + betaPhase;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  *rz1 = - alphaPhase - betaPhase;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__qasm_8c_source.html#l00223">qasm_recordAxisRotation()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00195">qasm_recordCompactUnitary()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00300">qasm_recordControlledAxisRotation()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00264">qasm_recordControlledCompactUnitary()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00278">qasm_recordControlledUnitary()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00341">qasm_recordMultiControlledUnitary()</a>, and <a class="el" href="QuEST__qasm_8c_source.html#l00207">qasm_recordUnitary()</a>.</p>
</div>
</div>
<a id="ab76254cfde16f0808476649507a1a2fc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab76254cfde16f0808476649507a1a2fc">◆ </a></span>hashString()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned long int hashString </td>
<td>(</td>
<td class="paramtype">char * </td>
<td class="paramname"><em>str</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00171">171</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  {</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> hash = 5381;</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordtype">int</span> c;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  </div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">while</span> ((c = *str++))</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  hash = ((hash << 5) + hash) + c; <span class="comment">/* hash * 33 + c */</span></div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  </div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">return</span> hash; </div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a9fd917537204e074119d4f283dea78e3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9fd917537204e074119d4f283dea78e3">◆ </a></span>setConjugateMatrixN()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void setConjugateMatrixN </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> </td>
<td class="paramname"><em>m</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00108">108</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  {</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordtype">int</span> len = 1 << m.<a class="code" href="structComplexMatrixN.html#a606f7afbc3f65a596bdca21cb43be6a8">numQubits</a>;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="QuEST__common_8c.html#ae2b222fda52c10fb420cb3ac78ca31e4">macro_setConjugateMatrix</a>(m, m, len);</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00092">macro_setConjugateMatrix</a>, and <a class="el" href="QuEST_8h_source.html#l00138">ComplexMatrixN::numQubits</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00312">controlledMultiQubitUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00329">multiControlledMultiQubitUnitary()</a>, and <a class="el" href="QuEST_8c_source.html#l00295">multiQubitUnitary()</a>.</p>
</div>
</div>
<a id="acf1c651a4359a370a2d9b3e1e1ebd430"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acf1c651a4359a370a2d9b3e1e1ebd430">◆ </a></span>shiftIndices()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void shiftIndices </td>
<td>(</td>
<td class="paramtype">int * </td>
<td class="paramname"><em>indices</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numIndices</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>shift</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00149">149</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  {</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j=0; j < numIndices; j++)</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  indices[j] += shift;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00312">controlledMultiQubitUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00329">multiControlledMultiQubitUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00559">multiControlledPhaseFlip()</a>, <a class="el" href="QuEST_8c_source.html#l00509">multiControlledPhaseShift()</a>, <a class="el" href="QuEST_8c_source.html#l00295">multiQubitUnitary()</a>, and <a class="el" href="QuEST_8c_source.html#l00640">multiRotatePauli()</a>.</p>
</div>
</div>
<a id="af71c2470694795a8d639be8ff9c34ed5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af71c2470694795a8d639be8ff9c34ed5">◆ </a></span>statevec_applyPauliSum()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_applyPauliSum </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>inQureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum <a class="el" href="group__type.html#ga1c703cf89629e4e9c7023cd402d67028">pauliOpType</a> * </td>
<td class="paramname"><em>allCodes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> * </td>
<td class="paramname"><em>termCoeffs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numSumTerms</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>outQureg</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00493">493</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  {</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  </div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keywordtype">int</span> numQb = inQureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>;</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keywordtype">int</span> targs[numQb];</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> q=0; q < numQb; q++)</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  targs[q] = q;</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  </div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <a class="code" href="QuEST__internal_8h.html#a758bad4237ff0bf3b4ff5be626a982ae">statevec_initBlankState</a>(outQureg);</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  </div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t < numSumTerms; t++) {</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <a class="code" href="structComplex.html">Complex</a> coef = (<a class="code" href="structComplex.html">Complex</a>) {.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>=termCoeffs[t], .imag=0};</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <a class="code" href="structComplex.html">Complex</a> iden = (<a class="code" href="structComplex.html">Complex</a>) {.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>=1, .imag=0};</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <a class="code" href="structComplex.html">Complex</a> zero = (<a class="code" href="structComplex.html">Complex</a>) {.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>=0, .imag=0};</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  </div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="comment">// outQureg += coef paulis(inQureg)</span></div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <a class="code" href="QuEST__common_8c.html#accae504dfcd6846159baa16a1e8263a0">statevec_applyPauliProd</a>(inQureg, targs, &allCodes[t*numQb], numQb);</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <a class="code" href="QuEST__internal_8h.html#ad64a23933361fafc1b6b1787759c2663">statevec_setWeightedQureg</a>(coef, inQureg, iden, outQureg, zero, outQureg); </div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  </div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="comment">// undero paulis(inQureg), exploiting XX=YY=ZZ=I</span></div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <a class="code" href="QuEST__common_8c.html#accae504dfcd6846159baa16a1e8263a0">statevec_applyPauliProd</a>(inQureg, targs, &allCodes[t*numQb], numQb);</div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  }</div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00165">Qureg::numQubitsRepresented</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, <a class="el" href="QuEST__common_8c_source.html#l00450">statevec_applyPauliProd()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l01366">statevec_initBlankState()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l03579">statevec_setWeightedQureg()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00806">applyPauliSum()</a>.</p>
</div>
</div>
<a id="aef380928d1b0003411d6159ca6594cd5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aef380928d1b0003411d6159ca6594cd5">◆ </a></span>statevec_calcExpecPauliProd()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> statevec_calcExpecPauliProd </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>targetQubits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum <a class="el" href="group__type.html#ga1c703cf89629e4e9c7023cd402d67028">pauliOpType</a> * </td>
<td class="paramname"><em>pauliCodes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numTargets</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>workspace</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00464">464</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  {</div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  </div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <a class="code" href="QuEST__internal_8h.html#aa4b77089145184d990848cd66993aa8b">statevec_cloneQureg</a>(workspace, qureg);</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <a class="code" href="QuEST__common_8c.html#accae504dfcd6846159baa16a1e8263a0">statevec_applyPauliProd</a>(workspace, targetQubits, pauliCodes, numTargets);</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  </div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="comment">// compute the expected value</span></div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> value;</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#acf78445e9435d09f44f0cc832c6aee79">isDensityMatrix</a>)</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  value = <a class="code" href="QuEST__internal_8h.html#a6153547f245c05874161a105e9a2f02c">densmatr_calcTotalProb</a>(workspace); <span class="comment">// Trace(ops qureg)</span></div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  value = <a class="code" href="QuEST__internal_8h.html#a7ebd3198a198f4cd20840f64fd8b84d0">statevec_calcInnerProduct</a>(workspace, qureg).<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>; <span class="comment">// <qureg|ops|qureg></span></div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  </div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="keywordflow">return</span> value;</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00053">densmatr_calcTotalProb()</a>, <a class="el" href="QuEST_8h_source.html#l00163">Qureg::isDensityMatrix</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, <a class="el" href="QuEST__common_8c_source.html#l00450">statevec_applyPauliProd()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00035">statevec_calcInnerProduct()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l01474">statevec_cloneQureg()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00871">calcExpecPauliProd()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00479">statevec_calcExpecPauliSum()</a>.</p>
</div>
</div>
<a id="ae0cfea24091c8336146aa84c2253992e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae0cfea24091c8336146aa84c2253992e">◆ </a></span>statevec_calcExpecPauliSum()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> statevec_calcExpecPauliSum </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum <a class="el" href="group__type.html#ga1c703cf89629e4e9c7023cd402d67028">pauliOpType</a> * </td>
<td class="paramname"><em>allCodes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> * </td>
<td class="paramname"><em>termCoeffs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numSumTerms</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>workspace</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00479">479</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  {</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  </div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keywordtype">int</span> numQb = qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>;</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keywordtype">int</span> targs[numQb];</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> q=0; q < numQb; q++)</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  targs[q] = q;</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  </div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> value = 0;</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t < numSumTerms; t++)</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  value += termCoeffs[t] * <a class="code" href="QuEST__common_8c.html#aef380928d1b0003411d6159ca6594cd5">statevec_calcExpecPauliProd</a>(qureg, targs, &allCodes[t*numQb], numQb, workspace);</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  </div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">return</span> value;</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00165">Qureg::numQubitsRepresented</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST__common_8c_source.html#l00464">statevec_calcExpecPauliProd()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00880">calcExpecPauliSum()</a>.</p>
</div>
</div>
<a id="aeeec9fe1501e25930adf6c38763a158e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeeec9fe1501e25930adf6c38763a158e">◆ </a></span>statevec_calcFidelity()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> statevec_calcFidelity </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>pureState</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00376">376</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  {</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  </div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <a class="code" href="structComplex.html">Complex</a> innerProd = <a class="code" href="QuEST__internal_8h.html#a7ebd3198a198f4cd20840f64fd8b84d0">statevec_calcInnerProduct</a>(qureg, pureState);</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> innerProdMag = innerProd.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>*innerProd.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> + innerProd.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a>*innerProd.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a>;</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">return</span> innerProdMag;</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00035">statevec_calcInnerProduct()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00861">calcFidelity()</a>.</p>
</div>
</div>
<a id="a7ebd3198a198f4cd20840f64fd8b84d0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7ebd3198a198f4cd20840f64fd8b84d0">◆ </a></span>statevec_calcInnerProduct()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structComplex.html">Complex</a> statevec_calcInnerProduct </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>bra</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>ket</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Terrible code which unnecessarily individually computes and sums the real and imaginary components of the inner product, so as to not have to worry about keeping the sums separated during reduction. </p>
<p>Truly disgusting, probably doubles runtime, please fix. @TODO could even do the kernel twice, storing real in bra.reduc and imag in ket.reduc? </p>
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00035">35</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  {</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <a class="code" href="structComplex.html">Complex</a> localInnerProd = <a class="code" href="QuEST__cpu_8c.html#a6fbb3b693f25dde1e9e3dc87dc1984f7">statevec_calcInnerProductLocal</a>(bra, ket);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (bra.<a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a> == 1)</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">return</span> localInnerProd;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> localReal = localInnerProd.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> localImag = localInnerProd.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a>;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> globalReal, globalImag;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  MPI_Allreduce(&localReal, &globalReal, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  MPI_Allreduce(&localImag, &globalImag, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <a class="code" href="structComplex.html">Complex</a> globalInnerProd;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  globalInnerProd.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = globalReal;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  globalInnerProd.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = globalImag;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">return</span> globalInnerProd;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l01751">copySharedReduceBlock()</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00186">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00176">Qureg::numChunks</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00019">REDUCE_SHARED_SIZE</a>, <a class="el" href="QuEST_8h_source.html#l00186">Qureg::secondLevelReduction</a>, <a class="el" href="QuEST__cpu_8c_source.html#l01070">statevec_calcInnerProductLocal()</a>, and <a class="el" href="QuEST__gpu_8cu_source.html#l01857">swapDouble()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00829">calcInnerProduct()</a>, <a class="el" href="QuEST__common_8c_source.html#l00464">statevec_calcExpecPauliProd()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00376">statevec_calcFidelity()</a>.</p>
</div>
</div>
<a id="ab33cdf01831c4545e51299178acf7f27"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab33cdf01831c4545e51299178acf7f27">◆ </a></span>statevec_calcProbOfOutcome()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> statevec_calcProbOfOutcome </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>measureQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>outcome</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01263">1263</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> {</div>
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> stateProb=0, totalStateProb=0;</div>
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  <span class="keywordtype">int</span> skipValuesWithinRank = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, measureQubit);</div>
<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>  <span class="keywordflow">if</span> (skipValuesWithinRank) {</div>
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  stateProb = <a class="code" href="QuEST__cpu_8c.html#afa06d0143cea46f1e425c61ac6f6f9a2">statevec_findProbabilityOfZeroLocal</a>(qureg, measureQubit);</div>
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  <span class="keywordflow">if</span> (!<a class="code" href="QuEST__cpu__distributed_8c.html#af0ea25f00987af4c53f17c9cca62ab41">isChunkToSkipInFindPZero</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, measureQubit)){</div>
<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>  stateProb = <a class="code" href="QuEST__cpu_8c.html#a430d98e35f1eae7f0815ac539057cf67">statevec_findProbabilityOfZeroDistributed</a>(qureg);</div>
<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  } <span class="keywordflow">else</span> stateProb = 0;</div>
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>  }</div>
<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>  MPI_Allreduce(&stateProb, &totalStateProb, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  <span class="keywordflow">if</span> (outcome==1) totalStateProb = 1.0 - totalStateProb;</div>
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>  <span class="keywordflow">return</span> totalStateProb;</div>
<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01254">isChunkToSkipInFindPZero()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l01912">statevec_findProbabilityOfZero()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03222">statevec_findProbabilityOfZeroDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l03166">statevec_findProbabilityOfZeroLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00845">calcProbOfOutcome()</a>, <a class="el" href="QuEST_8c_source.html#l00724">collapseToOutcome()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00360">statevec_measureWithStats()</a>.</p>
</div>
</div>
<a id="ad65ad1b5ea6f30b0c6b4ffda96e1a8e6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad65ad1b5ea6f30b0c6b4ffda96e1a8e6">◆ </a></span>statevec_calcTotalProb()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> statevec_calcTotalProb </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00088">88</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="comment">// Implemented using Kahan summation for greater accuracy at a slight floating</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="comment">// point operation overhead. For more details see https://en.wikipedia.org/wiki/Kahan_summation_algorithm</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> pTotal=0; </div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> y, t, c;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> allRankTotals=0;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> numAmpsPerRank = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  c = 0.0;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">for</span> (index=0; index<numAmpsPerRank; index++){ </div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">// Perform pTotal+=qureg.stateVec.real[index]*qureg.stateVec.real[index]; by Kahan</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  y = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real[index]*qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real[index] - c;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  t = pTotal + y;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="comment">// Don't change the bracketing on the following line</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  c = ( t - pTotal ) - y;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  pTotal = t;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="comment">// Perform pTotal+=qureg.stateVec.imag[index]*qureg.stateVec.imag[index]; by Kahan</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  y = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag[index]*qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag[index] - c;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  t = pTotal + y;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="comment">// Don't change the bracketing on the following line</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  c = ( t - pTotal ) - y;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  pTotal = t;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  } </div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a>>1)</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  MPI_Allreduce(&pTotal, &allRankTotals, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">else</span> </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  allRankTotals=pTotal;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  </div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">return</span> allRankTotals;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l00407">copyStateFromGPU()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00176">Qureg::numChunks</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00822">calcTotalProb()</a>.</p>
</div>
</div>
<a id="aa4b77089145184d990848cd66993aa8b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa4b77089145184d990848cd66993aa8b">◆ </a></span>statevec_cloneQureg()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_cloneQureg </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>targetQureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>copyQureg</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>works for both statevectors and density matrices </p>
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01474">1474</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>  {</div>
<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>  </div>
<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>  <span class="comment">// registers are equal sized, so nodes hold the same state-vector partitions</span></div>
<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>  </div>
<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>  stateVecSize = targetQureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>  </div>
<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *targetStateVecReal = targetQureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *targetStateVecImag = targetQureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *copyStateVecReal = copyQureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *copyStateVecImag = copyQureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>  </div>
<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>  <span class="comment">// initialise the state to |0000..0000></span></div>
<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> <span class="preprocessor"> shared (stateVecSize, targetStateVecReal, targetStateVecImag, copyStateVecReal, copyStateVecImag) \</span></div>
<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>  {</div>
<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>  targetStateVecReal[index] = copyStateVecReal[index];</div>
<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>  targetStateVecImag[index] = copyStateVecImag[index];</div>
<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>  }</div>
<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>  }</div>
<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00163">cloneQureg()</a>, <a class="el" href="QuEST_8c_source.html#l00062">createCloneQureg()</a>, <a class="el" href="QuEST_8c_source.html#l00143">initPureState()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00464">statevec_calcExpecPauliProd()</a>.</p>
</div>
</div>
<a id="ae7f25bb40734e18a992403b17355893b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7f25bb40734e18a992403b17355893b">◆ </a></span>statevec_collapseToKnownProbOutcome()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_collapseToKnownProbOutcome </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>measureQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>outcome</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>outcomeProb</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01301">1301</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> {</div>
<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  <span class="keywordtype">int</span> skipValuesWithinRank = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, measureQubit);</div>
<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  <span class="keywordflow">if</span> (skipValuesWithinRank) {</div>
<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  <a class="code" href="QuEST__cpu_8c.html#ab02bce0ebbb8f624e8ced8b09b99cdef">statevec_collapseToKnownProbOutcomeLocal</a>(qureg, measureQubit, outcome, totalStateProb);</div>
<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>  <span class="keywordflow">if</span> (!<a class="code" href="QuEST__cpu__distributed_8c.html#af0ea25f00987af4c53f17c9cca62ab41">isChunkToSkipInFindPZero</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, measureQubit)){</div>
<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  <span class="comment">// chunk has amps for q=0</span></div>
<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>  <span class="keywordflow">if</span> (outcome==0) <a class="code" href="QuEST__cpu_8c.html#acd82c94cfac89eacb901348ff0d06af8">statevec_collapseToKnownProbOutcomeDistributedRenorm</a>(qureg, measureQubit, </div>
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  totalStateProb);</div>
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  <span class="keywordflow">else</span> <a class="code" href="QuEST__cpu_8c.html#a7ea68e9132ed9db9c242353a33dba2f0">statevec_collapseToOutcomeDistributedSetZero</a>(qureg);</div>
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>  <span class="comment">// chunk has amps for q=1</span></div>
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>  <span class="keywordflow">if</span> (outcome==1) <a class="code" href="QuEST__cpu_8c.html#acd82c94cfac89eacb901348ff0d06af8">statevec_collapseToKnownProbOutcomeDistributedRenorm</a>(qureg, measureQubit, </div>
<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  totalStateProb);</div>
<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  <span class="keywordflow">else</span> <a class="code" href="QuEST__cpu_8c.html#a7ea68e9132ed9db9c242353a33dba2f0">statevec_collapseToOutcomeDistributedSetZero</a>(qureg);</div>
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>  }</div>
<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  }</div>
<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01254">isChunkToSkipInFindPZero()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03422">statevec_collapseToKnownProbOutcomeDistributedRenorm()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03340">statevec_collapseToKnownProbOutcomeLocal()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l03461">statevec_collapseToOutcomeDistributedSetZero()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00724">collapseToOutcome()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00360">statevec_measureWithStats()</a>.</p>
</div>
</div>
<a id="a94ee4df9faba286ad7a5bc829ef5174d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a94ee4df9faba286ad7a5bc829ef5174d">◆ </a></span>statevec_compactUnitary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_compactUnitary </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> </td>
<td class="paramname"><em>alpha</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> </td>
<td class="paramname"><em>beta</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00846">846</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00847"></a><span class="lineno"> 847</span> {</div>
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="comment">// flag to require memory exchange. 1: an entire block fits on one rank, 0: at most half a block fits on one rank</span></div>
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="keywordtype">int</span> useLocalDataOnly = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <a class="code" href="structComplex.html">Complex</a> rot1, rot2;</div>
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  </div>
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="keywordtype">int</span> rankIsUpper;</div>
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  </div>
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <a class="code" href="QuEST__cpu_8c.html#aa5865e66a6e0993ae17d400c9ee0eb43">statevec_compactUnitaryLocal</a>(qureg, targetQubit, alpha, beta);</div>
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  rankIsUpper = <a class="code" href="QuEST__cpu__distributed_8c.html#a0552889d6f57d9e0ed8b209bf426482d">chunkIsUpper</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#adb4b0373425b282abed27742d0ce0872">getRotAngle</a>(rankIsUpper, &rot1, &rot2, alpha, beta);</div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#a7dba097f23f5d48dfdc9f3250444e2e4">getChunkPairId</a>(rankIsUpper, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  </div>
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="comment">// this rank's values are either in the upper of lower half of the block. </span></div>
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <span class="comment">// send values to compactUnitaryDistributed in the correct order</span></div>
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <a class="code" href="QuEST__cpu_8c.html#a0a7a35628b1c1eb47336deb9afda5b68">statevec_compactUnitaryDistributed</a>(qureg,rot1,rot2,</div>
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  <a class="code" href="QuEST__cpu_8c.html#a0a7a35628b1c1eb47336deb9afda5b68">statevec_compactUnitaryDistributed</a>(qureg,rot1,rot2,</div>
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  }</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  }</div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00227">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00481">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00303">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00258">getRotAngle()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l01969">statevec_compactUnitaryDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l01656">statevec_compactUnitaryLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00403">compactUnitary()</a>, <a class="el" href="QuEST__common_8c_source.html#l00410">statevec_multiRotatePauli()</a>, <a class="el" href="QuEST__common_8c_source.html#l00310">statevec_rotateAroundAxis()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00317">statevec_rotateAroundAxisConj()</a>.</p>
</div>
</div>
<a id="ae6cecbad32a03416138b321cdc1a2c33"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae6cecbad32a03416138b321cdc1a2c33">◆ </a></span>statevec_compareStates()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int statevec_compareStates </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>mq1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>mq2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>precision</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01643">1643</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>  {</div>
<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> diff;</div>
<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize = mq1.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>  </div>
<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>  <span class="keywordflow">for</span> (<span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i=0; i<chunkSize; i++){</div>
<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>  diff = absReal(mq1.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real[i] - mq2.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real[i]);</div>
<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>  <span class="keywordflow">if</span> (diff>precision) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>  diff = absReal(mq1.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag[i] - mq2.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag[i]);</div>
<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>  <span class="keywordflow">if</span> (diff>precision) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>  }</div>
<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>  <span class="keywordflow">return</span> 1;</div>
<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l00407">copyStateFromGPU()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01052">compareStates()</a>.</p>
</div>
</div>
<a id="a47b467a5445c7f15d1a8b0b2ec0ef2de"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a47b467a5445c7f15d1a8b0b2ec0ef2de">◆ </a></span>statevec_controlledCompactUnitary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_controlledCompactUnitary </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> </td>
<td class="paramname"><em>alpha</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> </td>
<td class="paramname"><em>beta</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00922">922</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00923"></a><span class="lineno"> 923</span> {</div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  <span class="comment">// flag to require memory exchange. 1: an entire block fits on one rank, 0: at most half a block fits on one rank</span></div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <span class="keywordtype">int</span> useLocalDataOnly = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <a class="code" href="structComplex.html">Complex</a> rot1, rot2;</div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  </div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <span class="keywordtype">int</span> rankIsUpper;</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  </div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <a class="code" href="QuEST__cpu_8c.html#a0e5527c6e144fab8062ea5296e8bdf2a">statevec_controlledCompactUnitaryLocal</a>(qureg, controlQubit, targetQubit, alpha, beta);</div>
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  rankIsUpper = <a class="code" href="QuEST__cpu__distributed_8c.html#a0552889d6f57d9e0ed8b209bf426482d">chunkIsUpper</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#adb4b0373425b282abed27742d0ce0872">getRotAngle</a>(rankIsUpper, &rot1, &rot2, alpha, beta);</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#a7dba097f23f5d48dfdc9f3250444e2e4">getChunkPairId</a>(rankIsUpper, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <span class="comment">//printf("%d rank has pair rank: %d\n", qureg.rank, pairRank);</span></div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  </div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  <span class="comment">// this rank's values are either in the upper of lower half of the block. send values to controlledCompactUnitaryDistributed</span></div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  <span class="comment">// in the correct order</span></div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  <a class="code" href="QuEST__cpu_8c.html#a230eea38971f36de8f5437b1f47aaf3e">statevec_controlledCompactUnitaryDistributed</a>(qureg,controlQubit,rot1,rot2,</div>
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  <a class="code" href="QuEST__cpu_8c.html#a230eea38971f36de8f5437b1f47aaf3e">statevec_controlledCompactUnitaryDistributed</a>(qureg,controlQubit,rot1,rot2,</div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  }</div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  }</div>
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00227">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00481">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00303">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00258">getRotAngle()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02285">statevec_controlledCompactUnitaryDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02069">statevec_controlledCompactUnitaryLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00416">controlledCompactUnitary()</a>, <a class="el" href="QuEST__common_8c_source.html#l00326">statevec_controlledRotateAroundAxis()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00333">statevec_controlledRotateAroundAxisConj()</a>.</p>
</div>
</div>
<a id="af81e1960029f6f213bc2edacaf0dcb44"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af81e1960029f6f213bc2edacaf0dcb44">◆ </a></span>statevec_controlledMultiQubitUnitary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_controlledMultiQubitUnitary </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>ctrl</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>targets</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>numTargets</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> </td>
<td class="paramname"><em>u</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00534">534</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  {</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  </div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ctrlMask = 1LL << ctrl;</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <a class="code" href="QuEST__internal_8h.html#a47dcab9a0e6b07ddde264ed924add26c">statevec_multiControlledMultiQubitUnitary</a>(qureg, ctrlMask, targets, numTargets, u);</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01441">statevec_multiControlledMultiQubitUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00312">controlledMultiQubitUnitary()</a>.</p>
</div>
</div>
<a id="a114038296eb404b9b8a66aaad7b48800"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a114038296eb404b9b8a66aaad7b48800">◆ </a></span>statevec_controlledNot()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_controlledNot </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01063">1063</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> {</div>
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  <span class="comment">// flag to require memory exchange. 1: an entire block fits on one rank, 0: at most half a block fits on one rank</span></div>
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  <span class="keywordtype">int</span> useLocalDataOnly = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  <span class="keywordtype">int</span> rankIsUpper; <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  </div>
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  <a class="code" href="QuEST__cpu_8c.html#a11c9685e4ad1f44cfd6243e0c4435893">statevec_controlledNotLocal</a>(qureg, controlQubit, targetQubit);</div>
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  rankIsUpper = <a class="code" href="QuEST__cpu__distributed_8c.html#a0552889d6f57d9e0ed8b209bf426482d">chunkIsUpper</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#a7dba097f23f5d48dfdc9f3250444e2e4">getChunkPairId</a>(rankIsUpper, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  <span class="comment">// this rank's values are either in the upper of lower half of the block</span></div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  <a class="code" href="QuEST__cpu_8c.html#a97f17a0969e16f9ce9b55abd46bd732a">statevec_controlledNotDistributed</a>(qureg,controlQubit,</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//in</span></div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//out</span></div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  <a class="code" href="QuEST__cpu_8c.html#a97f17a0969e16f9ce9b55abd46bd732a">statevec_controlledNotDistributed</a>(qureg,controlQubit,</div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//in</span></div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//out</span></div>
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  }</div>
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  }</div>
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00227">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00481">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00303">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02612">statevec_controlledNotDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02550">statevec_controlledNotLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00523">controlledNot()</a>.</p>
</div>
</div>
<a id="a708246b16236c492094c2633da0c08ff"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a708246b16236c492094c2633da0c08ff">◆ </a></span>statevec_controlledPauliY()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_controlledPauliY </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01142">1142</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> {</div>
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  <span class="keywordtype">int</span> conjFac = 1;</div>
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  </div>
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  <span class="comment">// flag to require memory exchange. 1: an entire block fits on one rank, 0: at most half a block fits on one rank</span></div>
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  <span class="keywordtype">int</span> useLocalDataOnly = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  <span class="keywordtype">int</span> rankIsUpper; <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  </div>
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  <a class="code" href="QuEST__cpu_8c.html#a9028deac63419d71d523f73229a7bd84">statevec_controlledPauliYLocal</a>(qureg, controlQubit, targetQubit, conjFac);</div>
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  rankIsUpper = <a class="code" href="QuEST__cpu__distributed_8c.html#a0552889d6f57d9e0ed8b209bf426482d">chunkIsUpper</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#a7dba097f23f5d48dfdc9f3250444e2e4">getChunkPairId</a>(rankIsUpper, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  <span class="comment">// this rank's values are either in the upper of lower half of the block</span></div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <a class="code" href="QuEST__cpu_8c.html#a3ad35691d74b79e759c0fc53862c68b5">statevec_controlledPauliYDistributed</a>(qureg,controlQubit,</div>
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//in</span></div>
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>,</div>
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  conjFac); <span class="comment">//out</span></div>
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  <a class="code" href="QuEST__cpu_8c.html#a3ad35691d74b79e759c0fc53862c68b5">statevec_controlledPauliYDistributed</a>(qureg,controlQubit,</div>
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//in</span></div>
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>,</div>
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>  -conjFac); <span class="comment">//out</span></div>
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  }</div>
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  }</div>
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00227">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00481">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00303">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02793">statevec_controlledPauliYDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02740">statevec_controlledPauliYLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00535">controlledPauliY()</a>.</p>
</div>
</div>
<a id="a9e647339720bf82b30c6331fad544ec5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9e647339720bf82b30c6331fad544ec5">◆ </a></span>statevec_controlledPauliYConj()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_controlledPauliYConj </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01175">1175</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> {</div>
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  <span class="keywordtype">int</span> conjFac = -1;</div>
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  </div>
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  <span class="comment">// flag to require memory exchange. 1: an entire block fits on one rank, 0: at most half a block fits on one rank</span></div>
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  <span class="keywordtype">int</span> useLocalDataOnly = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  <span class="keywordtype">int</span> rankIsUpper; <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  </div>
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  <a class="code" href="QuEST__cpu_8c.html#a9028deac63419d71d523f73229a7bd84">statevec_controlledPauliYLocal</a>(qureg, controlQubit, targetQubit, conjFac);</div>
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>  rankIsUpper = <a class="code" href="QuEST__cpu__distributed_8c.html#a0552889d6f57d9e0ed8b209bf426482d">chunkIsUpper</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#a7dba097f23f5d48dfdc9f3250444e2e4">getChunkPairId</a>(rankIsUpper, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  <span class="comment">// this rank's values are either in the upper of lower half of the block</span></div>
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  <a class="code" href="QuEST__cpu_8c.html#a3ad35691d74b79e759c0fc53862c68b5">statevec_controlledPauliYDistributed</a>(qureg,controlQubit,</div>
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//in</span></div>
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>,</div>
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  conjFac); <span class="comment">//out</span></div>
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  <a class="code" href="QuEST__cpu_8c.html#a3ad35691d74b79e759c0fc53862c68b5">statevec_controlledPauliYDistributed</a>(qureg,controlQubit,</div>
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//in</span></div>
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>,</div>
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  -conjFac); <span class="comment">//out</span></div>
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  }</div>
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  }</div>
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00227">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00481">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00303">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02793">statevec_controlledPauliYDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02740">statevec_controlledPauliYLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00535">controlledPauliY()</a>.</p>
</div>
</div>
<a id="a7c0067cb9f243ead20de7392aea328bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7c0067cb9f243ead20de7392aea328bc">◆ </a></span>statevec_controlledPhaseFlip()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_controlledPhaseFlip </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>idQubit1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>idQubit2</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l03260">3260</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l03261"></a><span class="lineno"> 3261</span> {</div>
<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>  <span class="keywordtype">int</span> bit1, bit2;</div>
<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>  </div>
<div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>  <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize=qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03267"></a><span class="lineno"> 3267</span>  <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkId=qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>;</div>
<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>  </div>
<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03271"></a><span class="lineno"> 3271</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecReal = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecImag = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>  </div>
<div class="line"><a name="l03274"></a><span class="lineno"> 3274</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03275"></a><span class="lineno"> 3275</span> <span class="preprocessor"># pragma omp parallel for \</span></div>
<div class="line"><a name="l03276"></a><span class="lineno"> 3276</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l03277"></a><span class="lineno"> 3277</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal,stateVecImag ) \</span></div>
<div class="line"><a name="l03278"></a><span class="lineno"> 3278</span> <span class="preprocessor"> private (index,bit1,bit2) \</span></div>
<div class="line"><a name="l03279"></a><span class="lineno"> 3279</span> <span class="preprocessor"> schedule (static)</span></div>
<div class="line"><a name="l03280"></a><span class="lineno"> 3280</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l03282"></a><span class="lineno"> 3282</span>  bit1 = <a class="code" href="QuEST__gpu_8cu.html#a5cb8662afc6c644a46f7339c89bfd226">extractBit</a> (idQubit1, index+chunkId*chunkSize);</div>
<div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>  bit2 = <a class="code" href="QuEST__gpu_8cu.html#a5cb8662afc6c644a46f7339c89bfd226">extractBit</a> (idQubit2, index+chunkId*chunkSize);</div>
<div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>  <span class="keywordflow">if</span> (bit1 && bit2) {</div>
<div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>  stateVecReal [index] = - stateVecReal [index];</div>
<div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>  stateVecImag [index] = - stateVecImag [index];</div>
<div class="line"><a name="l03287"></a><span class="lineno"> 3287</span>  }</div>
<div class="line"><a name="l03288"></a><span class="lineno"> 3288</span>  }</div>
<div class="line"><a name="l03289"></a><span class="lineno"> 3289</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00082">extractBit()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00547">controlledPhaseFlip()</a>.</p>
</div>
</div>
<a id="adeb715f3f2c167f9bfbe92b75f5988ce"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adeb715f3f2c167f9bfbe92b75f5988ce">◆ </a></span>statevec_controlledPhaseShift()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_controlledPhaseShift </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>idQubit1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>idQubit2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l02980">2980</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l02981"></a><span class="lineno"> 2981</span> {</div>
<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>  <span class="keywordtype">int</span> bit1, bit2;</div>
<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>  </div>
<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>  <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize=qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>  <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkId=qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>;</div>
<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>  </div>
<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecReal = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecImag = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>  </div>
<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> stateRealLo, stateImagLo;</div>
<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>  <span class="keyword">const</span> <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> cosAngle = cos(angle);</div>
<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>  <span class="keyword">const</span> <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> sinAngle = sin(angle);</div>
<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>  </div>
<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span> <span class="preprocessor"># pragma omp parallel for \</span></div>
<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal,stateVecImag ) \</span></div>
<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span> <span class="preprocessor"> private (index,bit1,bit2,stateRealLo,stateImagLo) \</span></div>
<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span> <span class="preprocessor"> schedule (static)</span></div>
<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>  bit1 = <a class="code" href="QuEST__gpu_8cu.html#a5cb8662afc6c644a46f7339c89bfd226">extractBit</a> (idQubit1, index+chunkId*chunkSize);</div>
<div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>  bit2 = <a class="code" href="QuEST__gpu_8cu.html#a5cb8662afc6c644a46f7339c89bfd226">extractBit</a> (idQubit2, index+chunkId*chunkSize);</div>
<div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>  <span class="keywordflow">if</span> (bit1 && bit2) {</div>
<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>  </div>
<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>  stateRealLo = stateVecReal[index];</div>
<div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>  stateImagLo = stateVecImag[index];</div>
<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>  </div>
<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>  stateVecReal[index] = cosAngle*stateRealLo - sinAngle*stateImagLo;</div>
<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>  stateVecImag[index] = sinAngle*stateRealLo + cosAngle*stateImagLo; </div>
<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>  }</div>
<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>  }</div>
<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00082">extractBit()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00497">controlledPhaseShift()</a>.</p>
</div>
</div>
<a id="a2c489375aad6fb71203553c60bff043b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2c489375aad6fb71203553c60bff043b">◆ </a></span>statevec_controlledRotateAroundAxis()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_controlledRotateAroundAxis </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structVector.html">Vector</a> </td>
<td class="paramname"><em>axis</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00326">326</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  {</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  </div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <a class="code" href="structComplex.html">Complex</a> alpha, beta;</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <a class="code" href="QuEST__common_8c.html#a71b3ae4402c1c5039d3086ca0e47a522">getComplexPairFromRotation</a>(angle, axis, &alpha, &beta);</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <a class="code" href="QuEST__internal_8h.html#a47b467a5445c7f15d1a8b0b2ec0ef2de">statevec_controlledCompactUnitary</a>(qureg, controlQubit, targetQubit, alpha, beta);</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00113">getComplexPairFromRotation()</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00922">statevec_controlledCompactUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00586">controlledRotateAroundAxis()</a>, <a class="el" href="QuEST__common_8c_source.html#l00342">statevec_controlledRotateX()</a>, <a class="el" href="QuEST__common_8c_source.html#l00348">statevec_controlledRotateY()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00354">statevec_controlledRotateZ()</a>.</p>
</div>
</div>
<a id="aeb4ddeb09a3c0fa39ac33984bd5ca0ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeb4ddeb09a3c0fa39ac33984bd5ca0ea">◆ </a></span>statevec_controlledRotateAroundAxisConj()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_controlledRotateAroundAxisConj </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structVector.html">Vector</a> </td>
<td class="paramname"><em>axis</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00333">333</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  {</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  </div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <a class="code" href="structComplex.html">Complex</a> alpha, beta;</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <a class="code" href="QuEST__common_8c.html#a71b3ae4402c1c5039d3086ca0e47a522">getComplexPairFromRotation</a>(angle, axis, &alpha, &beta);</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  alpha.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> *= -1; </div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  beta.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> *= -1;</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <a class="code" href="QuEST__internal_8h.html#a47b467a5445c7f15d1a8b0b2ec0ef2de">statevec_controlledCompactUnitary</a>(qureg, controlQubit, targetQubit, alpha, beta);</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00113">getComplexPairFromRotation()</a>, <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00922">statevec_controlledCompactUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00586">controlledRotateAroundAxis()</a>.</p>
</div>
</div>
<a id="af59bc61f97d42cdceaf7fc0257a387d6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af59bc61f97d42cdceaf7fc0257a387d6">◆ </a></span>statevec_controlledRotateX()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_controlledRotateX </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00342">342</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  {</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  </div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <a class="code" href="structVector.html">Vector</a> unitAxis = {1, 0, 0};</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <a class="code" href="QuEST__common_8c.html#a2c489375aad6fb71203553c60bff043b">statevec_controlledRotateAroundAxis</a>(qureg, controlQubit, targetQubit, angle, unitAxis);</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00326">statevec_controlledRotateAroundAxis()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00219">controlledRotateX()</a>.</p>
</div>
</div>
<a id="ad2dc0754043172e0449c78569d27fd4a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad2dc0754043172e0449c78569d27fd4a">◆ </a></span>statevec_controlledRotateY()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_controlledRotateY </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00348">348</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  {</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  </div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <a class="code" href="structVector.html">Vector</a> unitAxis = {0, 1, 0};</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <a class="code" href="QuEST__common_8c.html#a2c489375aad6fb71203553c60bff043b">statevec_controlledRotateAroundAxis</a>(qureg, controlQubit, targetQubit, angle, unitAxis);</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00326">statevec_controlledRotateAroundAxis()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00231">controlledRotateY()</a>.</p>
</div>
</div>
<a id="a06bffb653fa42a67254d034b6cce6d7d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a06bffb653fa42a67254d034b6cce6d7d">◆ </a></span>statevec_controlledRotateZ()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_controlledRotateZ </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00354">354</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  {</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  </div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <a class="code" href="structVector.html">Vector</a> unitAxis = {0, 0, 1};</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <a class="code" href="QuEST__common_8c.html#a2c489375aad6fb71203553c60bff043b">statevec_controlledRotateAroundAxis</a>(qureg, controlQubit, targetQubit, angle, unitAxis);</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00326">statevec_controlledRotateAroundAxis()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00243">controlledRotateZ()</a>.</p>
</div>
</div>
<a id="aaa550b31c5576f9305f57cfe68b6dfbe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaa550b31c5576f9305f57cfe68b6dfbe">◆ </a></span>statevec_controlledTwoQubitUnitary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_controlledTwoQubitUnitary </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> </td>
<td class="paramname"><em>u</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00522">522</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  {</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  </div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ctrlMask = 1LL << controlQubit;</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <a class="code" href="QuEST__internal_8h.html#a877d988a763a52989484afc0f8d6ddf0">statevec_multiControlledTwoQubitUnitary</a>(qureg, ctrlMask, targetQubit1, targetQubit2, u);</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01385">statevec_multiControlledTwoQubitUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00268">controlledTwoQubitUnitary()</a>.</p>
</div>
</div>
<a id="a2600999a19c817bfcf7ca14779e33b9a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2600999a19c817bfcf7ca14779e33b9a">◆ </a></span>statevec_controlledUnitary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_controlledUnitary </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> </td>
<td class="paramname"><em>u</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00960">960</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00962"></a><span class="lineno"> 962</span> {</div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  <span class="comment">// flag to require memory exchange. 1: an entire block fits on one rank, 0: at most half a block fits on one rank</span></div>
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <span class="keywordtype">int</span> useLocalDataOnly = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <a class="code" href="structComplex.html">Complex</a> rot1, rot2;</div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  </div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <span class="keywordtype">int</span> rankIsUpper;</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  </div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <a class="code" href="QuEST__cpu_8c.html#ac0c120ac374b402c576c4b38bcda9992">statevec_controlledUnitaryLocal</a>(qureg, controlQubit, targetQubit, u);</div>
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  rankIsUpper = <a class="code" href="QuEST__cpu__distributed_8c.html#a0552889d6f57d9e0ed8b209bf426482d">chunkIsUpper</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a5c9b2f129bdffaaba9857f6eddecbb17">getRotAngleFromUnitaryMatrix</a>(rankIsUpper, &rot1, &rot2, u);</div>
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#a7dba097f23f5d48dfdc9f3250444e2e4">getChunkPairId</a>(rankIsUpper, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  <span class="comment">//printf("%d rank has pair rank: %d\n", qureg.rank, pairRank);</span></div>
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  </div>
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  <span class="comment">// this rank's values are either in the upper of lower half of the block. send values to controlledUnitaryDistributed</span></div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  <span class="comment">// in the correct order</span></div>
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  <a class="code" href="QuEST__cpu_8c.html#ab14681cbcc8f530333a9570328886b32">statevec_controlledUnitaryDistributed</a>(qureg,controlQubit,rot1,rot2,</div>
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <a class="code" href="QuEST__cpu_8c.html#ab14681cbcc8f530333a9570328886b32">statevec_controlledUnitaryDistributed</a>(qureg,controlQubit,rot1,rot2,</div>
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  }</div>
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  }</div>
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00227">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00481">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00303">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00283">getRotAngleFromUnitaryMatrix()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02347">statevec_controlledUnitaryDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02207">statevec_controlledUnitaryLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00359">controlledUnitary()</a>.</p>
</div>
</div>
<a id="a365bbb1b80cb00405c8bf1a4fa1ea8e5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a365bbb1b80cb00405c8bf1a4fa1ea8e5">◆ </a></span>statevec_createQureg()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_createQureg </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> * </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numQubits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQuESTEnv.html">QuESTEnv</a> </td>
<td class="paramname"><em>env</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01278">1278</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> {</div>
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> numAmps = 1LL << numQubits;</div>
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> numAmpsPerRank = numAmps/env.<a class="code" href="structQuESTEnv.html#af22aacd7c9905accae28484785c193b4">numRanks</a>;</div>
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  </div>
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  <span class="keywordflow">if</span> (numAmpsPerRank > SIZE_MAX) {</div>
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  printf(<span class="stringliteral">"Could not allocate memory (cannot fit numAmps into size_t)!"</span>);</div>
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  exit (EXIT_FAILURE);</div>
<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  }</div>
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  </div>
<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>  <span class="keywordtype">size_t</span> arrSize = (size_t) (numAmpsPerRank * <span class="keyword">sizeof</span>(*(qureg-><a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real)));</div>
<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>  qureg-><a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real = malloc(arrSize);</div>
<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  qureg-><a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag = malloc(arrSize);</div>
<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  <span class="keywordflow">if</span> (env.<a class="code" href="structQuESTEnv.html#af22aacd7c9905accae28484785c193b4">numRanks</a>>1){</div>
<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>  qureg-><a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.real = malloc(arrSize);</div>
<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>  qureg-><a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.imag = malloc(arrSize);</div>
<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>  }</div>
<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>  </div>
<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  <span class="keywordflow">if</span> ( (!(qureg-><a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real) || !(qureg-><a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag))</div>
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>  && numAmpsPerRank ) {</div>
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>  printf(<span class="stringliteral">"Could not allocate memory!"</span>);</div>
<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>  exit (EXIT_FAILURE);</div>
<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>  }</div>
<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>  </div>
<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  <span class="keywordflow">if</span> ( env.<a class="code" href="structQuESTEnv.html#af22aacd7c9905accae28484785c193b4">numRanks</a>>1 && (!(qureg-><a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.real) || !(qureg-><a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.imag))</div>
<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  && numAmpsPerRank ) {</div>
<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  printf(<span class="stringliteral">"Could not allocate memory!"</span>);</div>
<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  exit (EXIT_FAILURE);</div>
<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  }</div>
<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>  </div>
<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  qureg-><a class="code" href="structQureg.html#a0a86e8a50ea8c998b4a0a6640c5a1218">numQubitsInStateVec</a> = numQubits;</div>
<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>  qureg-><a class="code" href="structQureg.html#adef4935cac95763c29164cf99b144ed4">numAmpsTotal</a> = numAmps;</div>
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  qureg-><a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a> = numAmpsPerRank;</div>
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  qureg-><a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a> = env.<a class="code" href="structQuESTEnv.html#aa648bb336cf8598467cb62db00b9cee8">rank</a>;</div>
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>  qureg-><a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a> = env.<a class="code" href="structQuESTEnv.html#af22aacd7c9905accae28484785c193b4">numRanks</a>;</div>
<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>  qureg-><a class="code" href="structQureg.html#acf78445e9435d09f44f0cc832c6aee79">isDensityMatrix</a> = 0;</div>
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00186">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00163">Qureg::isDensityMatrix</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00172">Qureg::numAmpsTotal</a>, <a class="el" href="QuEST_8h_source.html#l00176">Qureg::numChunks</a>, <a class="el" href="QuEST_8h_source.html#l00167">Qureg::numQubitsInStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00202">QuESTEnv::numRanks</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00201">QuESTEnv::rank</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00019">REDUCE_SHARED_SIZE</a>, <a class="el" href="QuEST_8h_source.html#l00186">Qureg::secondLevelReduction</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00062">createCloneQureg()</a>, <a class="el" href="QuEST_8c_source.html#l00048">createDensityQureg()</a>, and <a class="el" href="QuEST_8c_source.html#l00034">createQureg()</a>.</p>
</div>
</div>
<a id="a2a52ad9f9ad9b2fd6a76f6d433b3b217"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2a52ad9f9ad9b2fd6a76f6d433b3b217">◆ </a></span>statevec_destroyQureg()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_destroyQureg </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQuESTEnv.html">QuESTEnv</a> </td>
<td class="paramname"><em>env</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01316">1316</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  {</div>
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>  </div>
<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  qureg.<a class="code" href="structQureg.html#a0a86e8a50ea8c998b4a0a6640c5a1218">numQubitsInStateVec</a> = 0;</div>
<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  qureg.<a class="code" href="structQureg.html#adef4935cac95763c29164cf99b144ed4">numAmpsTotal</a> = 0;</div>
<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a> = 0;</div>
<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  </div>
<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>  free(qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real);</div>
<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>  free(qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag);</div>
<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>  <span class="keywordflow">if</span> (env.<a class="code" href="structQuESTEnv.html#af22aacd7c9905accae28484785c193b4">numRanks</a>>1){</div>
<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>  free(qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.real);</div>
<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>  free(qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.imag);</div>
<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>  }</div>
<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real = NULL;</div>
<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag = NULL;</div>
<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.real = NULL;</div>
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.imag = NULL;</div>
<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00172">Qureg::numAmpsTotal</a>, <a class="el" href="QuEST_8h_source.html#l00167">Qureg::numQubitsInStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00202">QuESTEnv::numRanks</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00075">destroyQureg()</a>.</p>
</div>
</div>
<a id="abd509244d57657e148e4084c5ab5d28f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abd509244d57657e148e4084c5ab5d28f">◆ </a></span>statevec_getImagAmp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> statevec_getImagAmp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int </td>
<td class="paramname"><em>index</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00208">208</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  {</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordtype">int</span> chunkId = <a class="code" href="QuEST__cpu__distributed_8c.html#a28be36627b2dd9a0da63dd6f60121b06">getChunkIdFromIndex</a>(qureg, index);</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> el; </div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>==chunkId){</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  el = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag[index-chunkId*qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>];</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  }</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  MPI_Bcast(&el, 1, MPI_QuEST_REAL, chunkId, MPI_COMM_WORLD);</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">return</span> el; </div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00194">getChunkIdFromIndex()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00697">getAmp()</a>, <a class="el" href="QuEST_8c_source.html#l00707">getDensityAmp()</a>, <a class="el" href="QuEST_8c_source.html#l00683">getImagAmp()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00244">statevec_getProbAmp()</a>.</p>
</div>
</div>
<a id="a3afe58e49dce5536bc4c1b7caddf44a6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3afe58e49dce5536bc4c1b7caddf44a6">◆ </a></span>statevec_getProbAmp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> statevec_getProbAmp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int </td>
<td class="paramname"><em>index</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00244">244</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  {</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> real = <a class="code" href="QuEST__internal_8h.html#abc9a9ef4344c7faaaf28ac25c76649b9">statevec_getRealAmp</a>(qureg, index);</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> imag = <a class="code" href="QuEST__internal_8h.html#abd509244d57657e148e4084c5ab5d28f">statevec_getImagAmp</a>(qureg, index);</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">return</span> real*real + imag*imag;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00208">statevec_getImagAmp()</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00198">statevec_getRealAmp()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00690">getProbAmp()</a>.</p>
</div>
</div>
<a id="abc9a9ef4344c7faaaf28ac25c76649b9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abc9a9ef4344c7faaaf28ac25c76649b9">◆ </a></span>statevec_getRealAmp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> statevec_getRealAmp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int </td>
<td class="paramname"><em>index</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00198">198</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  {</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordtype">int</span> chunkId = <a class="code" href="QuEST__cpu__distributed_8c.html#a28be36627b2dd9a0da63dd6f60121b06">getChunkIdFromIndex</a>(qureg, index);</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> el; </div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>==chunkId){</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  el = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real[index-chunkId*qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>];</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  }</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  MPI_Bcast(&el, 1, MPI_QuEST_REAL, chunkId, MPI_COMM_WORLD);</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">return</span> el; </div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> } </div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00194">getChunkIdFromIndex()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00697">getAmp()</a>, <a class="el" href="QuEST_8c_source.html#l00707">getDensityAmp()</a>, <a class="el" href="QuEST_8c_source.html#l00676">getRealAmp()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00244">statevec_getProbAmp()</a>.</p>
</div>
</div>
<a id="a9226f386d010aaa85efc0e8889d341d5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9226f386d010aaa85efc0e8889d341d5">◆ </a></span>statevec_hadamard()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_hadamard </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01208">1208</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> {</div>
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  <span class="comment">// flag to require memory exchange. 1: an entire block fits on one rank, 0: at most half a block fits on one rank</span></div>
<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  <span class="keywordtype">int</span> useLocalDataOnly = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  </div>
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>  <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  <span class="keywordtype">int</span> rankIsUpper;</div>
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  </div>
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  <a class="code" href="QuEST__cpu_8c.html#a24f9ade18290c82bbb2c4a706b3d5999">statevec_hadamardLocal</a>(qureg, targetQubit);</div>
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>  rankIsUpper = <a class="code" href="QuEST__cpu__distributed_8c.html#a0552889d6f57d9e0ed8b209bf426482d">chunkIsUpper</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#a7dba097f23f5d48dfdc9f3250444e2e4">getChunkPairId</a>(rankIsUpper, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>  <span class="comment">//printf("%d rank has pair rank: %d\n", qureg.rank, pairRank);</span></div>
<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  <span class="comment">// this rank's values are either in the upper of lower half of the block. send values to hadamardDistributed</span></div>
<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>  <span class="comment">// in the correct order</span></div>
<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>  <a class="code" href="QuEST__cpu_8c.html#abea6570b95fdfa102511ccd1fcb30685">statevec_hadamardDistributed</a>(qureg,</div>
<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, rankIsUpper); <span class="comment">//output</span></div>
<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  <a class="code" href="QuEST__cpu_8c.html#abea6570b95fdfa102511ccd1fcb30685">statevec_hadamardDistributed</a>(qureg,</div>
<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, rankIsUpper); <span class="comment">//output</span></div>
<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  }</div>
<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  }</div>
<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00227">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00481">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00303">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02894">statevec_hadamardDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02834">statevec_hadamardLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00175">hadamard()</a>.</p>
</div>
</div>
<a id="a758bad4237ff0bf3b4ff5be626a982ae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a758bad4237ff0bf3b4ff5be626a982ae">◆ </a></span>statevec_initBlankState()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_initBlankState </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01366">1366</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> {</div>
<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>  </div>
<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>  </div>
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecReal = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecImag = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>  </div>
<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>  <span class="comment">// initialise the state-vector to all-zeroes</span></div>
<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal, stateVecImag) \</span></div>
<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>  {</div>
<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>  stateVecReal[index] = 0.0;</div>
<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>  stateVecImag[index] = 0.0;</div>
<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>  }</div>
<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>  }</div>
<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00117">initBlankState()</a>, <a class="el" href="QuEST__common_8c_source.html#l00493">statevec_applyPauliSum()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l01396">statevec_initZeroState()</a>.</p>
</div>
</div>
<a id="a288dc4b46bdacd69cbf4a6fd070d26a7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a288dc4b46bdacd69cbf4a6fd070d26a7">◆ </a></span>statevec_initClassicalState()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_initClassicalState </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int </td>
<td class="paramname"><em>stateInd</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01438">1438</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> {</div>
<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>  </div>
<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>  </div>
<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecReal = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecImag = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>  </div>
<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>  <span class="comment">// initialise the state to vector to all zeros</span></div>
<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal, stateVecImag) \</span></div>
<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>  {</div>
<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>  stateVecReal[index] = 0.0;</div>
<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>  stateVecImag[index] = 0.0;</div>
<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>  }</div>
<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>  }</div>
<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>  </div>
<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>  <span class="comment">// give the specified classical state prob 1</span></div>
<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a> == stateInd/stateVecSize){</div>
<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>  stateVecReal[stateInd % stateVecSize] = 1.0;</div>
<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>  stateVecImag[stateInd % stateVecSize] = 0.0;</div>
<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>  }</div>
<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00132">initClassicalState()</a>.</p>
</div>
</div>
<a id="ad9fd3017ea40cf63fd04b39e03494972"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad9fd3017ea40cf63fd04b39e03494972">◆ </a></span>statevec_initDebugState()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_initDebugState </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initialise the state vector of probability amplitudes to an (unphysical) state with each component of each probability amplitude a unique floating point value. </p>
<p>For debugging processes </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in,out]</td><td class="paramname">qureg</td><td>object representing the set of qubits to be initialised </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01559">1559</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> {</div>
<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize;</div>
<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> indexOffset;</div>
<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>  </div>
<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>  chunkSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>  </div>
<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecReal = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecImag = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>  </div>
<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>  indexOffset = chunkSize * qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>;</div>
<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>  </div>
<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>  <span class="comment">// initialise the state to |0000..0000></span></div>
<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> <span class="preprocessor"> shared (chunkSize, stateVecReal, stateVecImag, indexOffset) \</span></div>
<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>  {</div>
<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>  <span class="keywordflow">for</span> (index=0; index<chunkSize; index++) {</div>
<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>  stateVecReal[index] = ((indexOffset + index)*2.0)/10.0;</div>
<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>  stateVecImag[index] = ((indexOffset + index)*2.0+1.0)/10.0;</div>
<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>  }</div>
<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>  }</div>
<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01057">initDebugState()</a>.</p>
</div>
</div>
<a id="a482fc361fd5f08075404c72e536316a0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a482fc361fd5f08075404c72e536316a0">◆ </a></span>statevec_initPlusState()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_initPlusState </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01406">1406</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> {</div>
<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize, stateVecSize;</div>
<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>  </div>
<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>  chunkSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>  stateVecSize = chunkSize*qureg.<a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a>;</div>
<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> normFactor = 1.0/sqrt((<a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>)stateVecSize);</div>
<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>  </div>
<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecReal = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecImag = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>  </div>
<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>  <span class="comment">// initialise the state to |+++..+++> = 1/normFactor {1, 1, 1, ...}</span></div>
<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> <span class="preprocessor"> shared (chunkSize, stateVecReal, stateVecImag, normFactor) \</span></div>
<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>  {</div>
<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>  <span class="keywordflow">for</span> (index=0; index<chunkSize; index++) {</div>
<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>  stateVecReal[index] = normFactor;</div>
<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>  stateVecImag[index] = 0.0;</div>
<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>  }</div>
<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>  }</div>
<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00176">Qureg::numChunks</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00123">initPlusState()</a>.</p>
</div>
</div>
<a id="a05756b45f10135bb2eeb07380f806c20"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a05756b45f10135bb2eeb07380f806c20">◆ </a></span>statevec_initStateFromSingleFile()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int statevec_initStateFromSingleFile </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> * </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char </td>
<td class="paramname"><em>filename</em>[200], </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQuESTEnv.html">QuESTEnv</a> </td>
<td class="paramname"><em>env</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01593">1593</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>  {</div>
<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize, stateVecSize;</div>
<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> indexInChunk, totalIndex;</div>
<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>  </div>
<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>  chunkSize = qureg-><a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>  stateVecSize = chunkSize*qureg-><a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a>;</div>
<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>  </div>
<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecReal = qureg-><a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecImag = qureg-><a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>  </div>
<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>  FILE *fp;</div>
<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>  <span class="keywordtype">char</span> line[200];</div>
<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>  </div>
<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> rank=0; rank<(qureg-><a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a>); rank++){</div>
<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>  <span class="keywordflow">if</span> (rank==qureg-><a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>){</div>
<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>  fp = fopen(filename, <span class="stringliteral">"r"</span>);</div>
<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>  </div>
<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>  <span class="comment">// indicate file open failure</span></div>
<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>  <span class="keywordflow">if</span> (fp == NULL)</div>
<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>  <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>  </div>
<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>  indexInChunk = 0; totalIndex = 0;</div>
<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>  <span class="keywordflow">while</span> (fgets(line, <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>)*200, fp) != NULL && totalIndex<stateVecSize){</div>
<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>  <span class="keywordflow">if</span> (line[0]!=<span class="charliteral">'#'</span>){</div>
<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>  <span class="keywordtype">int</span> chunkId = (int) (totalIndex/chunkSize);</div>
<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>  <span class="keywordflow">if</span> (chunkId==qureg-><a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>){</div>
<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> <span class="preprocessor"> # if QuEST_PREC==1</span></div>
<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>  sscanf(line, <span class="stringliteral">"%f, %f"</span>, &(stateVecReal[indexInChunk]), </div>
<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>  &(stateVecImag[indexInChunk])); </div>
<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> <span class="preprocessor"> # elif QuEST_PREC==2 </span></div>
<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>  sscanf(line, <span class="stringliteral">"%lf, %lf"</span>, &(stateVecReal[indexInChunk]), </div>
<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>  &(stateVecImag[indexInChunk]));</div>
<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> <span class="preprocessor"> # elif QuEST_PREC==4</span></div>
<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>  sscanf(line, <span class="stringliteral">"%Lf, %Lf"</span>, &(stateVecReal[indexInChunk]), </div>
<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>  &(stateVecImag[indexInChunk]));</div>
<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> <span class="preprocessor"> # endif</span></div>
<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>  indexInChunk += 1;</div>
<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>  }</div>
<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>  totalIndex += 1;</div>
<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>  }</div>
<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>  } </div>
<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>  fclose(fp);</div>
<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>  }</div>
<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>  <a class="code" href="group__debug.html#ga8d31fe2d1ad4d01e2a1f5f6b8bc15b77">syncQuESTEnv</a>(env);</div>
<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>  }</div>
<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>  </div>
<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>  <span class="comment">// indicate success</span></div>
<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>  <span class="keywordflow">return</span> 1;</div>
<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00397">copyStateToGPU()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00176">Qureg::numChunks</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00162">syncQuESTEnv()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01061">initStateFromSingleFile()</a>.</p>
</div>
</div>
<a id="a923906770cac0da9e3459bae58de9e64"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a923906770cac0da9e3459bae58de9e64">◆ </a></span>statevec_initStateOfSingleQubit()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_initStateOfSingleQubit </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> * </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>qubitId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>outcome</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initialise the state vector of probability amplitudes such that one qubit is set to 'outcome' and all other qubits are in an equal superposition of zero and one. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in,out]</td><td class="paramname">qureg</td><td>object representing the set of qubits to be initialised </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">qubitId</td><td>id of qubit to set to state 'outcome' </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>of qubit 'qubitId' </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01513">1513</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> {</div>
<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize, stateVecSize;</div>
<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>  <span class="keywordtype">int</span> bit;</div>
<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>  <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkId=qureg-><a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>;</div>
<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>  </div>
<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>  chunkSize = qureg-><a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>  stateVecSize = chunkSize*qureg-><a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a>;</div>
<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> normFactor = 1.0/sqrt((<a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>)stateVecSize/2.0);</div>
<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>  </div>
<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecReal = qureg-><a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecImag = qureg-><a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>  </div>
<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>  <span class="comment">// initialise the state to |0000..0000></span></div>
<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> <span class="preprocessor"> shared (chunkSize, stateVecReal, stateVecImag, normFactor, qubitId, outcome) \</span></div>
<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> <span class="preprocessor"> private (index, bit) </span></div>
<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>  {</div>
<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>  <span class="keywordflow">for</span> (index=0; index<chunkSize; index++) {</div>
<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>  bit = <a class="code" href="QuEST__gpu_8cu.html#a5cb8662afc6c644a46f7339c89bfd226">extractBit</a>(qubitId, index+chunkId*chunkSize);</div>
<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>  <span class="keywordflow">if</span> (bit==outcome) {</div>
<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>  stateVecReal[index] = normFactor;</div>
<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>  stateVecImag[index] = 0.0;</div>
<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>  stateVecReal[index] = 0.0;</div>
<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>  stateVecImag[index] = 0.0;</div>
<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>  }</div>
<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>  }</div>
<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>  }</div>
<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00082">extractBit()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00176">Qureg::numChunks</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01066">initStateOfSingleQubit()</a>.</p>
</div>
</div>
<a id="a2ca0c6ba07ab2b4b437321bf17efc966"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2ca0c6ba07ab2b4b437321bf17efc966">◆ </a></span>statevec_initZeroState()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_initZeroState </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01396">1396</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> {</div>
<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  <a class="code" href="QuEST__cpu_8c.html#a758bad4237ff0bf3b4ff5be626a982ae">statevec_initBlankState</a>(qureg);</div>
<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>==0){</div>
<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>  <span class="comment">// zero state |0000..0000> has probability 1</span></div>
<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real[0] = 1.0;</div>
<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag[0] = 0.0;</div>
<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>  }</div>
<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l01366">statevec_initBlankState()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00111">initZeroState()</a>.</p>
</div>
</div>
<a id="ac2eb81c71d0e0fbec7be5b45b1db1448"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac2eb81c71d0e0fbec7be5b45b1db1448">◆ </a></span>statevec_measureWithStats()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int statevec_measureWithStats </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>measureQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> * </td>
<td class="paramname"><em>outcomeProb</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00360">360</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  {</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  </div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> zeroProb = <a class="code" href="QuEST__internal_8h.html#ab33cdf01831c4545e51299178acf7f27">statevec_calcProbOfOutcome</a>(qureg, measureQubit, 0);</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordtype">int</span> outcome = <a class="code" href="QuEST__common_8c.html#a9d19fc690afb425d0df5feb09be567a3">generateMeasurementOutcome</a>(zeroProb, outcomeProb);</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <a class="code" href="QuEST__internal_8h.html#ae7f25bb40734e18a992403b17355893b">statevec_collapseToKnownProbOutcome</a>(qureg, measureQubit, outcome, *outcomeProb);</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keywordflow">return</span> outcome;</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00154">generateMeasurementOutcome()</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01263">statevec_calcProbOfOutcome()</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01301">statevec_collapseToKnownProbOutcome()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00756">measure()</a>, and <a class="el" href="QuEST_8c_source.html#l00743">measureWithStats()</a>.</p>
</div>
</div>
<a id="a47dcab9a0e6b07ddde264ed924add26c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a47dcab9a0e6b07ddde264ed924add26c">◆ </a></span>statevec_multiControlledMultiQubitUnitary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_multiControlledMultiQubitUnitary </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int </td>
<td class="paramname"><em>ctrlMask</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>targs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>numTargs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> </td>
<td class="paramname"><em>u</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This calls swapQubitAmps only when it would involve a distributed communication; if the qubit chunks already fit in the node, it operates the unitary direct. </p>
<p>It is already gauranteed here that all target qubits can fit on each node (this is validated in the front-end)</p>
<p>@TODO: refactor so that the 'swap back' isn't performed; instead the qubit locations are updated. </p>
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01441">1441</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>  {</div>
<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>  </div>
<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>  <span class="comment">// bit mask of target qubits (for quick collision checking)</span></div>
<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> targMask = <a class="code" href="QuEST__common_8c.html#abd1285091450c7c2806cc26c71eb5df2">getQubitBitMask</a>(targs, numTargs);</div>
<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>  </div>
<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>  <span class="comment">// find lowest qubit available for swapping (isn't in targs)</span></div>
<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>  <span class="keywordtype">int</span> freeQb=0;</div>
<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>  <span class="keywordflow">while</span> (<a class="code" href="QuEST__cpu__internal_8h.html#a216d03e71c5a0a48089aee3401df4298">maskContainsBit</a>(targMask, freeQb))</div>
<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>  freeQb++;</div>
<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>  </div>
<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>  <span class="comment">// assign indices of where each target will be swapped to (else itself)</span></div>
<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>  <span class="keywordtype">int</span> swapTargs[numTargs];</div>
<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t<numTargs; t++) {</div>
<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targs[t]))</div>
<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>  swapTargs[t] = targs[t];</div>
<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>  <span class="comment">// mark swap</span></div>
<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>  swapTargs[t] = freeQb;</div>
<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>  </div>
<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>  <span class="comment">// update ctrlMask if swapped-out qubit was a control</span></div>
<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__cpu__internal_8h.html#a216d03e71c5a0a48089aee3401df4298">maskContainsBit</a>(ctrlMask, swapTargs[t]))</div>
<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>  ctrlMask = <a class="code" href="QuEST__gpu_8cu.html#a6aea6cf9c06d05a5765ad01311531627">flipBit</a>(<a class="code" href="QuEST__gpu_8cu.html#a6aea6cf9c06d05a5765ad01311531627">flipBit</a>(ctrlMask, swapTargs[t]), targs[t]); <span class="comment">// swap targ and ctrl</span></div>
<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>  </div>
<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>  <span class="comment">// locate next available on-chunk qubit</span></div>
<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>  freeQb++;</div>
<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>  <span class="keywordflow">while</span> (<a class="code" href="QuEST__cpu__internal_8h.html#a216d03e71c5a0a48089aee3401df4298">maskContainsBit</a>(targMask, freeQb))</div>
<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>  freeQb++;</div>
<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>  }</div>
<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>  }</div>
<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>  </div>
<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>  <span class="comment">// perform swaps as necessary </span></div>
<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t<numTargs; t++)</div>
<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>  <span class="keywordflow">if</span> (swapTargs[t] != targs[t])</div>
<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, targs[t], swapTargs[t]);</div>
<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>  </div>
<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>  <span class="comment">// all target qubits have now been swapped into local memory</span></div>
<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>  <a class="code" href="QuEST__cpu_8c.html#acc5726bc7f899d5fd85454ffcc64f60c">statevec_multiControlledMultiQubitUnitaryLocal</a>(qureg, ctrlMask, swapTargs, numTargs, u);</div>
<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>  </div>
<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>  <span class="comment">// undo swaps </span></div>
<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t<numTargs; t++)</div>
<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>  <span class="keywordflow">if</span> (swapTargs[t] != targs[t])</div>
<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, targs[t], swapTargs[t]);</div>
<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l00095">flipBit()</a>, <a class="el" href="QuEST__common_8c_source.html#l00043">getQubitBitMask()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00140">ComplexMatrixN::imag</a>, <a class="el" href="QuEST__cpu__internal_8h_source.html#l00034">maskContainsBit()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00138">ComplexMatrixN::numQubits</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00139">ComplexMatrixN::real</a>, <a class="el" href="QuEST__cpu_8c_source.html#l01814">statevec_multiControlledMultiQubitUnitaryLocal()</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01358">statevec_swapQubitAmps()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00589">densmatr_applyMultiQubitKrausSuperoperator()</a>, <a class="el" href="QuEST__common_8c_source.html#l00581">densmatr_applyTwoQubitKrausSuperoperator()</a>, <a class="el" href="QuEST_8c_source.html#l00329">multiControlledMultiQubitUnitary()</a>, <a class="el" href="QuEST__common_8c_source.html#l00534">statevec_controlledMultiQubitUnitary()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00528">statevec_multiQubitUnitary()</a>.</p>
</div>
</div>
<a id="ac4ee5979d475e8c729294b8ef7e0270d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac4ee5979d475e8c729294b8ef7e0270d">◆ </a></span>statevec_multiControlledPhaseFlip()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_multiControlledPhaseFlip </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>controlQubits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numControlQubits</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l03291">3291</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l03292"></a><span class="lineno"> 3292</span> {</div>
<div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>  </div>
<div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>  <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize=qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>  <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkId=qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>;</div>
<div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>  </div>
<div class="line"><a name="l03299"></a><span class="lineno"> 3299</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> mask = <a class="code" href="QuEST__common_8c.html#abd1285091450c7c2806cc26c71eb5df2">getQubitBitMask</a>(controlQubits, numControlQubits);</div>
<div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>  </div>
<div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecReal = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecImag = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>  </div>
<div class="line"><a name="l03305"></a><span class="lineno"> 3305</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03306"></a><span class="lineno"> 3306</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l03307"></a><span class="lineno"> 3307</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l03308"></a><span class="lineno"> 3308</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal,stateVecImag, mask ) \</span></div>
<div class="line"><a name="l03309"></a><span class="lineno"> 3309</span> <span class="preprocessor"> private (index)</span></div>
<div class="line"><a name="l03310"></a><span class="lineno"> 3310</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>  {</div>
<div class="line"><a name="l03312"></a><span class="lineno"> 3312</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03313"></a><span class="lineno"> 3313</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l03314"></a><span class="lineno"> 3314</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03315"></a><span class="lineno"> 3315</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l03316"></a><span class="lineno"> 3316</span>  <span class="keywordflow">if</span> (mask == (mask & (index+chunkId*chunkSize)) ){</div>
<div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>  stateVecReal [index] = - stateVecReal [index];</div>
<div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>  stateVecImag [index] = - stateVecImag [index];</div>
<div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>  }</div>
<div class="line"><a name="l03320"></a><span class="lineno"> 3320</span>  }</div>
<div class="line"><a name="l03321"></a><span class="lineno"> 3321</span>  }</div>
<div class="line"><a name="l03322"></a><span class="lineno"> 3322</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__common_8c_source.html#l00043">getQubitBitMask()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00559">multiControlledPhaseFlip()</a>.</p>
</div>
</div>
<a id="aa662796ea6e0f471143c53becae8c12c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa662796ea6e0f471143c53becae8c12c">◆ </a></span>statevec_multiControlledPhaseShift()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_multiControlledPhaseShift </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>controlQubits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numControlQubits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l03019">3019</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span> {</div>
<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>  </div>
<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>  <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize=qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>  <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkId=qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>;</div>
<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>  </div>
<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> mask = <a class="code" href="QuEST__common_8c.html#abd1285091450c7c2806cc26c71eb5df2">getQubitBitMask</a>(controlQubits, numControlQubits);</div>
<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>  </div>
<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecReal = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecImag = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>  </div>
<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> stateRealLo, stateImagLo;</div>
<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>  <span class="keyword">const</span> <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> cosAngle = cos(angle);</div>
<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>  <span class="keyword">const</span> <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> sinAngle = sin(angle);</div>
<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>  </div>
<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal, stateVecImag, mask) \</span></div>
<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span> <span class="preprocessor"> private (index, stateRealLo, stateImagLo)</span></div>
<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>  {</div>
<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03045"></a><span class="lineno"> 3045</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l03046"></a><span class="lineno"> 3046</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>  <span class="keywordflow">if</span> (mask == (mask & (index+chunkId*chunkSize)) ){</div>
<div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>  </div>
<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>  stateRealLo = stateVecReal[index];</div>
<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>  stateImagLo = stateVecImag[index];</div>
<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>  </div>
<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>  stateVecReal[index] = cosAngle*stateRealLo - sinAngle*stateImagLo;</div>
<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>  stateVecImag[index] = sinAngle*stateRealLo + cosAngle*stateImagLo; </div>
<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>  }</div>
<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>  }</div>
<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>  }</div>
<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__common_8c_source.html#l00043">getQubitBitMask()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00509">multiControlledPhaseShift()</a>.</p>
</div>
</div>
<a id="a877d988a763a52989484afc0f8d6ddf0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a877d988a763a52989484afc0f8d6ddf0">◆ </a></span>statevec_multiControlledTwoQubitUnitary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_multiControlledTwoQubitUnitary </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int </td>
<td class="paramname"><em>ctrlMask</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>q1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>q2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> </td>
<td class="paramname"><em>u</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>This calls swapQubitAmps only when it would involve a distributed communication; if the qubit chunks already fit in the node, it operates the unitary direct. </p>
<p>Note the order of q1 and q2 in the call to twoQubitUnitaryLocal is important.</p>
<p>@TODO: refactor so that the 'swap back' isn't performed; instead the qubit locations are updated. @TODO: the double swap (q1,q2 to 0,1) may be possible simultaneously by a bespoke swap routine. </p>
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01385">1385</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>  {</div>
<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>  <span class="keywordtype">int</span> q1FitsInNode = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, q1);</div>
<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>  <span class="keywordtype">int</span> q2FitsInNode = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, q2);</div>
<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>  </div>
<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>  <span class="keywordflow">if</span> (q1FitsInNode && q2FitsInNode) { </div>
<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>  <a class="code" href="QuEST__cpu_8c.html#aa7f5f0bf7fa945d46eb51e79e00a8dfd">statevec_multiControlledTwoQubitUnitaryLocal</a>(qureg, ctrlMask, q1, q2, u);</div>
<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>  </div>
<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (q1FitsInNode) {</div>
<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>  <span class="keywordtype">int</span> qSwap = (q1 > 0)? q1-1 : q1+1;</div>
<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  </div>
<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>  <span class="comment">// ensure ctrl == qSwap, ensure ctrlMask updates under the swap</span></div>
<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__cpu__internal_8h.html#a216d03e71c5a0a48089aee3401df4298">maskContainsBit</a>(ctrlMask, qSwap))</div>
<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>  ctrlMask = <a class="code" href="QuEST__gpu_8cu.html#a6aea6cf9c06d05a5765ad01311531627">flipBit</a>(<a class="code" href="QuEST__gpu_8cu.html#a6aea6cf9c06d05a5765ad01311531627">flipBit</a>(ctrlMask, q2), qSwap);</div>
<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  </div>
<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q2, qSwap);</div>
<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>  <a class="code" href="QuEST__cpu_8c.html#aa7f5f0bf7fa945d46eb51e79e00a8dfd">statevec_multiControlledTwoQubitUnitaryLocal</a>(qureg, ctrlMask, q1, qSwap, u);</div>
<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q2, qSwap);</div>
<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>  </div>
<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (q2FitsInNode) {</div>
<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>  <span class="keywordtype">int</span> qSwap = (q2 > 0)? q2-1 : q2+1;</div>
<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>  </div>
<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>  <span class="comment">// ensure ctrl == qSwap, ensure ctrlMask updates under the swap</span></div>
<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__cpu__internal_8h.html#a216d03e71c5a0a48089aee3401df4298">maskContainsBit</a>(ctrlMask, qSwap))</div>
<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>  ctrlMask = <a class="code" href="QuEST__gpu_8cu.html#a6aea6cf9c06d05a5765ad01311531627">flipBit</a>(<a class="code" href="QuEST__gpu_8cu.html#a6aea6cf9c06d05a5765ad01311531627">flipBit</a>(ctrlMask, q1), qSwap);</div>
<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>  </div>
<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q1, qSwap);</div>
<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>  <a class="code" href="QuEST__cpu_8c.html#aa7f5f0bf7fa945d46eb51e79e00a8dfd">statevec_multiControlledTwoQubitUnitaryLocal</a>(qureg, ctrlMask, qSwap, q2, u);</div>
<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q1, qSwap);</div>
<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>  </div>
<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>  <span class="comment">// we know with certainty that both q1 and q2 >= 2</span></div>
<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>  <span class="keywordtype">int</span> swap1 = 0;</div>
<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>  <span class="keywordtype">int</span> swap2 = 1;</div>
<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>  </div>
<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>  <span class="comment">// if ctrl == swap1 or swap2, ensure ctrlMask updates under the swap</span></div>
<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__cpu__internal_8h.html#a216d03e71c5a0a48089aee3401df4298">maskContainsBit</a>(ctrlMask, swap1))</div>
<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>  ctrlMask = <a class="code" href="QuEST__gpu_8cu.html#a6aea6cf9c06d05a5765ad01311531627">flipBit</a>(<a class="code" href="QuEST__gpu_8cu.html#a6aea6cf9c06d05a5765ad01311531627">flipBit</a>(ctrlMask, swap1), q1);</div>
<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__cpu__internal_8h.html#a216d03e71c5a0a48089aee3401df4298">maskContainsBit</a>(ctrlMask, swap2))</div>
<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>  ctrlMask = <a class="code" href="QuEST__gpu_8cu.html#a6aea6cf9c06d05a5765ad01311531627">flipBit</a>(<a class="code" href="QuEST__gpu_8cu.html#a6aea6cf9c06d05a5765ad01311531627">flipBit</a>(ctrlMask, swap2), q2);</div>
<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>  </div>
<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q1, swap1);</div>
<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q2, swap2);</div>
<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>  <a class="code" href="QuEST__cpu_8c.html#aa7f5f0bf7fa945d46eb51e79e00a8dfd">statevec_multiControlledTwoQubitUnitaryLocal</a>(qureg, ctrlMask, swap1, swap2, u);</div>
<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q1, swap1);</div>
<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q2, swap2);</div>
<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>  }</div>
<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l00095">flipBit()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST__cpu__internal_8h_source.html#l00034">maskContainsBit()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__cpu_8c_source.html#l01715">statevec_multiControlledTwoQubitUnitaryLocal()</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01358">statevec_swapQubitAmps()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00575">densmatr_applyKrausSuperoperator()</a>, <a class="el" href="QuEST_8c_source.html#l00281">multiControlledTwoQubitUnitary()</a>, <a class="el" href="QuEST__common_8c_source.html#l00522">statevec_controlledTwoQubitUnitary()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00516">statevec_twoQubitUnitary()</a>.</p>
</div>
</div>
<a id="a7ec46b4b96cda399095a2488ceff69b6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7ec46b4b96cda399095a2488ceff69b6">◆ </a></span>statevec_multiControlledUnitary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_multiControlledUnitary </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int </td>
<td class="paramname"><em>ctrlQubitsMask</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int </td>
<td class="paramname"><em>ctrlFlipMask</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> </td>
<td class="paramname"><em>u</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00999">999</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> {</div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <span class="comment">// flag to require memory exchange. 1: an entire block fits on one rank, 0: at most half a block fits on one rank</span></div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="keywordtype">int</span> useLocalDataOnly = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  <a class="code" href="structComplex.html">Complex</a> rot1, rot2;</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  </div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  <span class="keywordtype">int</span> rankIsUpper;</div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  </div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  <a class="code" href="QuEST__cpu_8c.html#ae757d3b816aa7ba7bea13334a9b77441">statevec_multiControlledUnitaryLocal</a>(qureg, targetQubit, ctrlQubitsMask, ctrlFlipMask, u);</div>
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  rankIsUpper = <a class="code" href="QuEST__cpu__distributed_8c.html#a0552889d6f57d9e0ed8b209bf426482d">chunkIsUpper</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a5c9b2f129bdffaaba9857f6eddecbb17">getRotAngleFromUnitaryMatrix</a>(rankIsUpper, &rot1, &rot2, u);</div>
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#a7dba097f23f5d48dfdc9f3250444e2e4">getChunkPairId</a>(rankIsUpper, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  </div>
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  </div>
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <span class="comment">// this rank's values are either in the upper of lower half of the block. send values to multiControlledUnitaryDistributed</span></div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <span class="comment">// in the correct order</span></div>
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  <a class="code" href="QuEST__cpu_8c.html#a623e5479f5dd45e87fe2acef55620771">statevec_multiControlledUnitaryDistributed</a>(qureg,targetQubit,ctrlQubitsMask,ctrlFlipMask,rot1,rot2,</div>
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  <a class="code" href="QuEST__cpu_8c.html#a623e5479f5dd45e87fe2acef55620771">statevec_multiControlledUnitaryDistributed</a>(qureg,targetQubit,ctrlQubitsMask,ctrlFlipMask,rot1,rot2,</div>
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  }</div>
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  }</div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00227">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00481">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00303">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00283">getRotAngleFromUnitaryMatrix()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02413">statevec_multiControlledUnitaryDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02140">statevec_multiControlledUnitaryLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00372">multiControlledUnitary()</a>, and <a class="el" href="QuEST_8c_source.html#l00387">multiStateControlledUnitary()</a>.</p>
</div>
</div>
<a id="ad92b16763f97e70c052eb87a5d1fd3e9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad92b16763f97e70c052eb87a5d1fd3e9">◆ </a></span>statevec_multiQubitUnitary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_multiQubitUnitary </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>targets</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>numTargets</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> </td>
<td class="paramname"><em>u</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00528">528</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  {</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  </div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ctrlMask = 0;</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <a class="code" href="QuEST__internal_8h.html#a47dcab9a0e6b07ddde264ed924add26c">statevec_multiControlledMultiQubitUnitary</a>(qureg, ctrlMask, targets, numTargets, u);</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01441">statevec_multiControlledMultiQubitUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00295">multiQubitUnitary()</a>.</p>
</div>
</div>
<a id="a2153d8611247dd3a2ef483355265cc99"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2153d8611247dd3a2ef483355265cc99">◆ </a></span>statevec_multiRotatePauli()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_multiRotatePauli </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>targetQubits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum <a class="el" href="group__type.html#ga1c703cf89629e4e9c7023cd402d67028">pauliOpType</a> * </td>
<td class="paramname"><em>targetPaulis</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numTargets</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>applyConj</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>applyConj=1 will apply conjugate operation, else applyConj=0 </p>
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00410">410</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  {</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> fac = 1/sqrt(2);</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <a class="code" href="structComplex.html">Complex</a> uRxAlpha = {.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = fac, .imag = 0}; <span class="comment">// Rx(pi/2)* rotates Z -> Y</span></div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <a class="code" href="structComplex.html">Complex</a> uRxBeta = {.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = 0, .imag = (applyConj)? fac : -fac};</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <a class="code" href="structComplex.html">Complex</a> uRyAlpha = {.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = fac, .imag = 0}; <span class="comment">// Ry(-pi/2) rotates Z -> X</span></div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <a class="code" href="structComplex.html">Complex</a> uRyBeta = {.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = -fac, .imag = 0};</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  </div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="comment">// mask may be modified to remove superfluous Identity ops</span></div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> mask = <a class="code" href="QuEST__common_8c.html#abd1285091450c7c2806cc26c71eb5df2">getQubitBitMask</a>(targetQubits, numTargets);</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  </div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="comment">// rotate basis so that exp(Z) will effect exp(Y) and exp(X)</span></div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t < numTargets; t++) {</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">if</span> (targetPaulis[t] == <a class="code" href="group__type.html#gga1c703cf89629e4e9c7023cd402d67028a63800f45b01ccc2608f754aee850bf4a">PAULI_I</a>)</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  mask -= 1LL << targetQubits[t]; <span class="comment">// remove target from mask</span></div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">if</span> (targetPaulis[t] == <a class="code" href="group__type.html#gga1c703cf89629e4e9c7023cd402d67028a7abac7bb5b71e17382014c443244ad5c">PAULI_X</a>)</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <a class="code" href="QuEST__internal_8h.html#a94ee4df9faba286ad7a5bc829ef5174d">statevec_compactUnitary</a>(qureg, targetQubits[t], uRyAlpha, uRyBeta);</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">if</span> (targetPaulis[t] == <a class="code" href="group__type.html#gga1c703cf89629e4e9c7023cd402d67028a2c64a9aaee27f6bcfef894d159e759bd">PAULI_Y</a>)</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <a class="code" href="QuEST__internal_8h.html#a94ee4df9faba286ad7a5bc829ef5174d">statevec_compactUnitary</a>(qureg, targetQubits[t], uRxAlpha, uRxBeta);</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="comment">// (targetPaulis[t] == 3) is Z basis</span></div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  }</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  </div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="comment">// does nothing if there are no qubits to 'rotate'</span></div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">if</span> (mask != 0)</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <a class="code" href="QuEST__internal_8h.html#a8d88b4ed94ab024e5e7b2f1f4f505b44">statevec_multiRotateZ</a>(qureg, mask, (applyConj)? -angle : angle);</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  </div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="comment">// undo X and Y basis rotations</span></div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  uRxBeta.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> *= -1;</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  uRyBeta.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> *= -1;</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t < numTargets; t++) {</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keywordflow">if</span> (targetPaulis[t] == <a class="code" href="group__type.html#gga1c703cf89629e4e9c7023cd402d67028a7abac7bb5b71e17382014c443244ad5c">PAULI_X</a>)</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <a class="code" href="QuEST__internal_8h.html#a94ee4df9faba286ad7a5bc829ef5174d">statevec_compactUnitary</a>(qureg, targetQubits[t], uRyAlpha, uRyBeta);</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">if</span> (targetPaulis[t] == <a class="code" href="group__type.html#gga1c703cf89629e4e9c7023cd402d67028a2c64a9aaee27f6bcfef894d159e759bd">PAULI_Y</a>)</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <a class="code" href="QuEST__internal_8h.html#a94ee4df9faba286ad7a5bc829ef5174d">statevec_compactUnitary</a>(qureg, targetQubits[t], uRxAlpha, uRxBeta);</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  }</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00043">getQubitBitMask()</a>, <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00096">PAULI_I</a>, <a class="el" href="QuEST_8h_source.html#l00096">PAULI_X</a>, <a class="el" href="QuEST_8h_source.html#l00096">PAULI_Y</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00846">statevec_compactUnitary()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l03069">statevec_multiRotateZ()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00640">multiRotatePauli()</a>.</p>
</div>
</div>
<a id="a8d88b4ed94ab024e5e7b2f1f4f505b44"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8d88b4ed94ab024e5e7b2f1f4f505b44">◆ </a></span>statevec_multiRotateZ()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_multiRotateZ </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int </td>
<td class="paramname"><em>mask</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l03069">3069</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l03070"></a><span class="lineno"> 3070</span> {</div>
<div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>  </div>
<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>  <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize=qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>  <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkId=qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>;</div>
<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>  </div>
<div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecReal = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecImag = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>  </div>
<div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> stateReal, stateImag;</div>
<div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>  <span class="keyword">const</span> <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> cosAngle = cos(angle/2.0);</div>
<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>  <span class="keyword">const</span> <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> sinAngle = sin(angle/2.0); </div>
<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>  </div>
<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>  <span class="comment">// = +-1, to flip sinAngle based on target qubit parity, to effect</span></div>
<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>  <span class="comment">// exp(-angle/2 i fac_j)|j></span></div>
<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>  <span class="keywordtype">int</span> fac; </div>
<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>  </div>
<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03090"></a><span class="lineno"> 3090</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal, stateVecImag, mask) \</span></div>
<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span> <span class="preprocessor"> private (index, fac, stateReal, stateImag)</span></div>
<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>  {</div>
<div class="line"><a name="l03096"></a><span class="lineno"> 3096</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03097"></a><span class="lineno"> 3097</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l03098"></a><span class="lineno"> 3098</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>  stateReal = stateVecReal[index];</div>
<div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>  stateImag = stateVecImag[index];</div>
<div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>  </div>
<div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>  <span class="comment">// odd-parity target qubits get fac_j = -1</span></div>
<div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>  fac = <a class="code" href="QuEST__cpu_8c.html#a37e522505286f17fe6ef74b9f607a5c6">getBitMaskParity</a>(mask & (index+chunkId*chunkSize))? -1 : 1;</div>
<div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>  stateVecReal[index] = cosAngle*stateReal + fac * sinAngle*stateImag;</div>
<div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>  stateVecImag[index] = - fac * sinAngle*stateReal + cosAngle*stateImag; </div>
<div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>  }</div>
<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>  }</div>
<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03060">getBitMaskParity()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00624">multiRotateZ()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00410">statevec_multiRotatePauli()</a>.</p>
</div>
</div>
<a id="abdb6e0ee1e407755e1b944086cedd90e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abdb6e0ee1e407755e1b944086cedd90e">◆ </a></span>statevec_pauliX()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_pauliX </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01036">1036</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> {</div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  <span class="comment">// flag to require memory exchange. 1: an entire block fits on one rank, 0: at most half a block fits on one rank</span></div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  <span class="keywordtype">int</span> useLocalDataOnly = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  </div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  <span class="keywordtype">int</span> rankIsUpper;</div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  </div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  <a class="code" href="QuEST__cpu_8c.html#a842aaecd6d6cdc194c0b7c84623d2111">statevec_pauliXLocal</a>(qureg, targetQubit);</div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  rankIsUpper = <a class="code" href="QuEST__cpu__distributed_8c.html#a0552889d6f57d9e0ed8b209bf426482d">chunkIsUpper</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#a7dba097f23f5d48dfdc9f3250444e2e4">getChunkPairId</a>(rankIsUpper, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  <span class="comment">//printf("%d rank has pair rank: %d\n", qureg.rank, pairRank);</span></div>
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="comment">// this rank's values are either in the upper of lower half of the block. pauliX just replaces</span></div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  <span class="comment">// this rank's values with pair values</span></div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <a class="code" href="QuEST__cpu_8c.html#a464efbd1d7ca5a7b25c83ada001955c2">statevec_pauliXDistributed</a>(qureg,</div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">// in</span></div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">// out</span></div>
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  }</div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00227">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00481">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00303">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02522">statevec_pauliXDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02464">statevec_pauliXLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00431">pauliX()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00450">statevec_applyPauliProd()</a>.</p>
</div>
</div>
<a id="a73b56fbac6e464a37805fa9d9657a8f9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a73b56fbac6e464a37805fa9d9657a8f9">◆ </a></span>statevec_pauliY()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_pauliY </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01092">1092</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> { </div>
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  <span class="keywordtype">int</span> conjFac = 1;</div>
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  </div>
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  <span class="comment">// flag to require memory exchange. 1: an entire block fits on one rank, 0: at most half a block fits on one rank</span></div>
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  <span class="keywordtype">int</span> useLocalDataOnly = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  <span class="keywordtype">int</span> rankIsUpper; <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  </div>
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  <a class="code" href="QuEST__cpu_8c.html#a8edf5f2066b05fb343931f45e2bec8f8">statevec_pauliYLocal</a>(qureg, targetQubit, conjFac);</div>
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  rankIsUpper = <a class="code" href="QuEST__cpu__distributed_8c.html#a0552889d6f57d9e0ed8b209bf426482d">chunkIsUpper</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#a7dba097f23f5d48dfdc9f3250444e2e4">getChunkPairId</a>(rankIsUpper, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  <span class="comment">// this rank's values are either in the upper of lower half of the block</span></div>
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  <a class="code" href="QuEST__cpu_8c.html#a3528cf8d741807987d8150d59ccb1ba3">statevec_pauliYDistributed</a>(qureg,</div>
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">// in</span></div>
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">// out</span></div>
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  rankIsUpper, conjFac);</div>
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  }</div>
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00227">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00481">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00303">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02704">statevec_pauliYDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02647">statevec_pauliYLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00442">pauliY()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00450">statevec_applyPauliProd()</a>.</p>
</div>
</div>
<a id="aee97816cfabeea7874cd837a8d105412"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aee97816cfabeea7874cd837a8d105412">◆ </a></span>statevec_pauliYConj()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_pauliYConj </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01117">1117</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> { </div>
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  <span class="keywordtype">int</span> conjFac = -1;</div>
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  </div>
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  <span class="comment">// flag to require memory exchange. 1: an entire block fits on one rank, 0: at most half a block fits on one rank</span></div>
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  <span class="keywordtype">int</span> useLocalDataOnly = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <span class="keywordtype">int</span> rankIsUpper; <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  </div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  <a class="code" href="QuEST__cpu_8c.html#a8edf5f2066b05fb343931f45e2bec8f8">statevec_pauliYLocal</a>(qureg, targetQubit, conjFac);</div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  rankIsUpper = <a class="code" href="QuEST__cpu__distributed_8c.html#a0552889d6f57d9e0ed8b209bf426482d">chunkIsUpper</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#a7dba097f23f5d48dfdc9f3250444e2e4">getChunkPairId</a>(rankIsUpper, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  <span class="comment">// this rank's values are either in the upper of lower half of the block</span></div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <a class="code" href="QuEST__cpu_8c.html#a3528cf8d741807987d8150d59ccb1ba3">statevec_pauliYDistributed</a>(qureg,</div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">// in</span></div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">// out</span></div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  rankIsUpper, conjFac);</div>
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  }</div>
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00227">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00481">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00303">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02704">statevec_pauliYDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02647">statevec_pauliYLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00442">pauliY()</a>.</p>
</div>
</div>
<a id="ad711cac41adb0fea1ad4797ce14953e0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad711cac41adb0fea1ad4797ce14953e0">◆ </a></span>statevec_pauliZ()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_pauliZ </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00257">257</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  {</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <a class="code" href="structComplex.html">Complex</a> term; </div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  term.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = -1;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  term.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = 0;</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <a class="code" href="QuEST__internal_8h.html#a8972669148af60d7e1c09687f69673d4">statevec_phaseShiftByTerm</a>(qureg, targetQubit, term);</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02940">statevec_phaseShiftByTerm()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00453">pauliZ()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00450">statevec_applyPauliProd()</a>.</p>
</div>
</div>
<a id="a37bcd16fc0bbc8e665585ba9b99f382b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a37bcd16fc0bbc8e665585ba9b99f382b">◆ </a></span>statevec_phaseShift()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_phaseShift </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00250">250</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <a class="code" href="structComplex.html">Complex</a> term; </div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  term.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = cos(angle); </div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  term.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = sin(angle);</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <a class="code" href="QuEST__internal_8h.html#a8972669148af60d7e1c09687f69673d4">statevec_phaseShiftByTerm</a>(qureg, targetQubit, term);</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02940">statevec_phaseShiftByTerm()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00486">phaseShift()</a>.</p>
</div>
</div>
<a id="a8972669148af60d7e1c09687f69673d4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8972669148af60d7e1c09687f69673d4">◆ </a></span>statevec_phaseShiftByTerm()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_phaseShiftByTerm </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> </td>
<td class="paramname"><em>term</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l02940">2940</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l02941"></a><span class="lineno"> 2941</span> { </div>
<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>  <span class="keywordtype">int</span> targetBit;</div>
<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>  </div>
<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>  <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize=qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>  <span class="keyword">const</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkId=qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>;</div>
<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>  </div>
<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecReal = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *stateVecImag = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>  </div>
<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> stateRealLo, stateImagLo;</div>
<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>  <span class="keyword">const</span> <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> cosAngle = term.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>;</div>
<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>  <span class="keyword">const</span> <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> sinAngle = term.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a>;</div>
<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>  </div>
<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span> <span class="preprocessor"># pragma omp parallel for \</span></div>
<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal,stateVecImag ) \</span></div>
<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span> <span class="preprocessor"> private (index,targetBit,stateRealLo,stateImagLo) \</span></div>
<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span> <span class="preprocessor"> schedule (static)</span></div>
<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>  </div>
<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>  <span class="comment">// update the coeff of the |1> state of the target qubit</span></div>
<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>  targetBit = <a class="code" href="QuEST__gpu_8cu.html#a5cb8662afc6c644a46f7339c89bfd226">extractBit</a> (targetQubit, index+chunkId*chunkSize);</div>
<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>  <span class="keywordflow">if</span> (targetBit) {</div>
<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>  </div>
<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>  stateRealLo = stateVecReal[index];</div>
<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>  stateImagLo = stateVecImag[index];</div>
<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>  </div>
<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>  stateVecReal[index] = cosAngle*stateRealLo - sinAngle*stateImagLo;</div>
<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>  stateVecImag[index] = sinAngle*stateRealLo + cosAngle*stateImagLo; </div>
<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>  }</div>
<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>  }</div>
<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00082">extractBit()</a>, <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00257">statevec_pauliZ()</a>, <a class="el" href="QuEST__common_8c_source.html#l00250">statevec_phaseShift()</a>, <a class="el" href="QuEST__common_8c_source.html#l00264">statevec_sGate()</a>, <a class="el" href="QuEST__common_8c_source.html#l00278">statevec_sGateConj()</a>, <a class="el" href="QuEST__common_8c_source.html#l00271">statevec_tGate()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00285">statevec_tGateConj()</a>.</p>
</div>
</div>
<a id="a1e57230c7995447039e62a84c0a36524"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1e57230c7995447039e62a84c0a36524">◆ </a></span>statevec_reportStateToScreen()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_reportStateToScreen </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQuESTEnv.html">QuESTEnv</a> </td>
<td class="paramname"><em>env</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>reportRank</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Print the current state vector of probability amplitudes for a set of qubits to standard out. </p>
<p>For debugging purposes. Each rank should print output serially. Only print output for systems <= 5 qubits </p>
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01334">1334</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  {</div>
<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  <span class="keywordtype">int</span> rank;</div>
<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#a0a86e8a50ea8c998b4a0a6640c5a1218">numQubitsInStateVec</a><=5){</div>
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  <span class="keywordflow">for</span> (rank=0; rank<qureg.<a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a>; rank++){</div>
<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>==rank){</div>
<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  <span class="keywordflow">if</span> (reportRank) {</div>
<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  printf(<span class="stringliteral">"Reporting state from rank %d [\n"</span>, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>);</div>
<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>  printf(<span class="stringliteral">"real, imag\n"</span>);</div>
<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rank==0) {</div>
<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>  printf(<span class="stringliteral">"Reporting state [\n"</span>);</div>
<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  printf(<span class="stringliteral">"real, imag\n"</span>);</div>
<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  }</div>
<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  </div>
<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  <span class="keywordflow">for</span>(index=0; index<qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>; index++){</div>
<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>  <span class="comment">//printf(REAL_STRING_FORMAT ", " REAL_STRING_FORMAT "\n", qureg.pairStateVec.real[index], qureg.pairStateVec.imag[index]);</span></div>
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  printf(REAL_STRING_FORMAT <span class="stringliteral">", "</span> REAL_STRING_FORMAT <span class="stringliteral">"\n"</span>, qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real[index], qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag[index]);</div>
<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  }</div>
<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  <span class="keywordflow">if</span> (reportRank || rank==qureg.<a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a>-1) printf(<span class="stringliteral">"]\n"</span>);</div>
<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  }</div>
<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>  <a class="code" href="group__debug.html#ga8d31fe2d1ad4d01e2a1f5f6b8bc15b77">syncQuESTEnv</a>(env);</div>
<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>  }</div>
<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  } <span class="keywordflow">else</span> printf(<span class="stringliteral">"Error: reportStateToScreen will not print output for systems of more than 5 qubits.\n"</span>);</div>
<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00407">copyStateFromGPU()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00176">Qureg::numChunks</a>, <a class="el" href="QuEST_8h_source.html#l00167">Qureg::numQubitsInStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00162">syncQuESTEnv()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01073">reportStateToScreen()</a>.</p>
</div>
</div>
<a id="a65b9087ca37c096caa5c6e8586b67946"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a65b9087ca37c096caa5c6e8586b67946">◆ </a></span>statevec_rotateAroundAxis()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_rotateAroundAxis </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>rotQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structVector.html">Vector</a> </td>
<td class="paramname"><em>axis</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00310">310</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  {</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  </div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <a class="code" href="structComplex.html">Complex</a> alpha, beta;</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <a class="code" href="QuEST__common_8c.html#a71b3ae4402c1c5039d3086ca0e47a522">getComplexPairFromRotation</a>(angle, axis, &alpha, &beta);</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <a class="code" href="QuEST__internal_8h.html#a94ee4df9faba286ad7a5bc829ef5174d">statevec_compactUnitary</a>(qureg, rotQubit, alpha, beta);</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00113">getComplexPairFromRotation()</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00846">statevec_compactUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00573">rotateAroundAxis()</a>, <a class="el" href="QuEST__common_8c_source.html#l00292">statevec_rotateX()</a>, <a class="el" href="QuEST__common_8c_source.html#l00298">statevec_rotateY()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00304">statevec_rotateZ()</a>.</p>
</div>
</div>
<a id="af9839c40de8df0cecc72a0258a20d979"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af9839c40de8df0cecc72a0258a20d979">◆ </a></span>statevec_rotateAroundAxisConj()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_rotateAroundAxisConj </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>rotQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structVector.html">Vector</a> </td>
<td class="paramname"><em>axis</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00317">317</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  {</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  </div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <a class="code" href="structComplex.html">Complex</a> alpha, beta;</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <a class="code" href="QuEST__common_8c.html#a71b3ae4402c1c5039d3086ca0e47a522">getComplexPairFromRotation</a>(angle, axis, &alpha, &beta);</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  alpha.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> *= -1; </div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  beta.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> *= -1;</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="QuEST__internal_8h.html#a94ee4df9faba286ad7a5bc829ef5174d">statevec_compactUnitary</a>(qureg, rotQubit, alpha, beta);</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00113">getComplexPairFromRotation()</a>, <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00846">statevec_compactUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00573">rotateAroundAxis()</a>.</p>
</div>
</div>
<a id="aca123cc22e13a2cb819ef6c2f455b9e4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aca123cc22e13a2cb819ef6c2f455b9e4">◆ </a></span>statevec_rotateX()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_rotateX </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>rotQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00292">292</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  {</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  </div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <a class="code" href="structVector.html">Vector</a> unitAxis = {1, 0, 0};</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <a class="code" href="QuEST__common_8c.html#a65b9087ca37c096caa5c6e8586b67946">statevec_rotateAroundAxis</a>(qureg, rotQubit, angle, unitAxis);</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00310">statevec_rotateAroundAxis()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00186">rotateX()</a>.</p>
</div>
</div>
<a id="a4a62c8c00dc4adf74b982ad8a9049170"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4a62c8c00dc4adf74b982ad8a9049170">◆ </a></span>statevec_rotateY()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_rotateY </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>rotQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00298">298</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  {</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  </div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <a class="code" href="structVector.html">Vector</a> unitAxis = {0, 1, 0};</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <a class="code" href="QuEST__common_8c.html#a65b9087ca37c096caa5c6e8586b67946">statevec_rotateAroundAxis</a>(qureg, rotQubit, angle, unitAxis);</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00310">statevec_rotateAroundAxis()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00197">rotateY()</a>.</p>
</div>
</div>
<a id="ab96ee09e32e297629a481c3ba6d7eaf7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab96ee09e32e297629a481c3ba6d7eaf7">◆ </a></span>statevec_rotateZ()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_rotateZ </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>rotQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> </td>
<td class="paramname"><em>angle</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00304">304</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  {</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  </div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="structVector.html">Vector</a> unitAxis = {0, 0, 1};</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <a class="code" href="QuEST__common_8c.html#a65b9087ca37c096caa5c6e8586b67946">statevec_rotateAroundAxis</a>(qureg, rotQubit, angle, unitAxis);</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00310">statevec_rotateAroundAxis()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00208">rotateZ()</a>.</p>
</div>
</div>
<a id="aa121d55f2ca09c06a96ddcd433c60b0f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa121d55f2ca09c06a96ddcd433c60b0f">◆ </a></span>statevec_setAmps()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_setAmps </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int </td>
<td class="paramname"><em>startInd</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> * </td>
<td class="paramname"><em>reals</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> * </td>
<td class="paramname"><em>imags</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int </td>
<td class="paramname"><em>numAmps</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l01236">1236</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  {</div>
<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  </div>
<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  <span class="comment">/* this is actually distributed, since the user's code runs on every node */</span></div>
<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  </div>
<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  <span class="comment">// local start/end indices of the given amplitudes, assuming they fit in this chunk</span></div>
<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>  <span class="comment">// these may be negative or above qureg.numAmpsPerChunk</span></div>
<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> localStartInd = startInd - qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>*qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> localEndInd = localStartInd + numAmps; <span class="comment">// exclusive</span></div>
<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  </div>
<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  <span class="comment">// add this to a local index to get corresponding elem in reals & imags</span></div>
<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> offset = qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>*qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a> - startInd;</div>
<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  </div>
<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  <span class="comment">// restrict these indices to fit into this chunk</span></div>
<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  <span class="keywordflow">if</span> (localStartInd < 0)</div>
<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  localStartInd = 0;</div>
<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  <span class="keywordflow">if</span> (localEndInd > qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>)</div>
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>  localEndInd = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  <span class="comment">// they may now be out of order = no iterations</span></div>
<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  </div>
<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  <span class="comment">// unpacking OpenMP vars</span></div>
<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* vecRe = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* vecIm = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>  </div>
<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="preprocessor"> shared (localStartInd,localEndInd, vecRe,vecIm, reals,imags, offset) \</span></div>
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  {</div>
<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  <span class="comment">// iterate these local inds - this might involve no iterations</span></div>
<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>  <span class="keywordflow">for</span> (index=localStartInd; index < localEndInd; index++) {</div>
<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  vecRe[index] = reals[index + offset];</div>
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>  vecIm[index] = imags[index + offset];</div>
<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>  }</div>
<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  }</div>
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00184">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00155">initStateFromAmps()</a>, <a class="el" href="QuEST_8c_source.html#l00779">setAmps()</a>, and <a class="el" href="QuEST_8c_source.html#l00788">setDensityAmps()</a>.</p>
</div>
</div>
<a id="ad64a23933361fafc1b6b1787759c2663"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad64a23933361fafc1b6b1787759c2663">◆ </a></span>statevec_setWeightedQureg()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_setWeightedQureg </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> </td>
<td class="paramname"><em>fac1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> </td>
<td class="paramname"><em>fac2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplex.html">Complex</a> </td>
<td class="paramname"><em>facOut</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>out</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu_8c_source.html#l03579">3579</a> of file <a class="el" href="QuEST__cpu_8c_source.html">QuEST_cpu.c</a>.</p>
<div class="fragment"><div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>  {</div>
<div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>  </div>
<div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> numAmps = qureg1.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>  </div>
<div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *vecRe1 = qureg1.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *vecIm1 = qureg1.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *vecRe2 = qureg2.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *vecIm2 = qureg2.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *vecReOut = out.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *vecImOut = out.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>  </div>
<div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> facRe1 = fac1.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>; </div>
<div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> facIm1 = fac1.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a>;</div>
<div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> facRe2 = fac2.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>;</div>
<div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> facIm2 = fac2.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a>;</div>
<div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> facReOut = facOut.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>;</div>
<div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> facImOut = facOut.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a>;</div>
<div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>  </div>
<div class="line"><a name="l03597"></a><span class="lineno"> 3597</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> re1,im1, re2,im2, reOut,imOut;</div>
<div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>  </div>
<div class="line"><a name="l03600"></a><span class="lineno"> 3600</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03601"></a><span class="lineno"> 3601</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l03602"></a><span class="lineno"> 3602</span> <span class="preprocessor"> shared (vecRe1,vecIm1, vecRe2,vecIm2, vecReOut,vecImOut, facRe1,facIm1,facRe2,facIm2, numAmps) \</span></div>
<div class="line"><a name="l03603"></a><span class="lineno"> 3603</span> <span class="preprocessor"> private (index, re1,im1, re2,im2, reOut,imOut)</span></div>
<div class="line"><a name="l03604"></a><span class="lineno"> 3604</span> <span class="preprocessor"># endif </span></div>
<div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>  {</div>
<div class="line"><a name="l03606"></a><span class="lineno"> 3606</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03607"></a><span class="lineno"> 3607</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l03608"></a><span class="lineno"> 3608</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03609"></a><span class="lineno"> 3609</span>  <span class="keywordflow">for</span> (index=0LL; index<numAmps; index++) {</div>
<div class="line"><a name="l03610"></a><span class="lineno"> 3610</span>  re1 = vecRe1[index]; im1 = vecIm1[index];</div>
<div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>  re2 = vecRe2[index]; im2 = vecIm2[index];</div>
<div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>  reOut = vecReOut[index];</div>
<div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>  imOut = vecImOut[index];</div>
<div class="line"><a name="l03614"></a><span class="lineno"> 3614</span>  </div>
<div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>  vecReOut[index] = (facReOut*reOut - facImOut*imOut) + (facRe1*re1 - facIm1*im1) + (facRe2*re2 - facIm2*im2);</div>
<div class="line"><a name="l03616"></a><span class="lineno"> 3616</span>  vecImOut[index] = (facReOut*imOut + facImOut*reOut) + (facRe1*im1 + facIm1*re1) + (facRe2*im2 + facIm2*re2);</div>
<div class="line"><a name="l03617"></a><span class="lineno"> 3617</span>  }</div>
<div class="line"><a name="l03618"></a><span class="lineno"> 3618</span>  }</div>
<div class="line"><a name="l03619"></a><span class="lineno"> 3619</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, and <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00795">setWeightedQureg()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00493">statevec_applyPauliSum()</a>.</p>
</div>
</div>
<a id="aea5b9ea10791217a793a8040c36e4efc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aea5b9ea10791217a793a8040c36e4efc">◆ </a></span>statevec_sGate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_sGate </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00264">264</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  {</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <a class="code" href="structComplex.html">Complex</a> term; </div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  term.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = 0;</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  term.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = 1;</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <a class="code" href="QuEST__internal_8h.html#a8972669148af60d7e1c09687f69673d4">statevec_phaseShiftByTerm</a>(qureg, targetQubit, term);</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> } </div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02940">statevec_phaseShiftByTerm()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00464">sGate()</a>.</p>
</div>
</div>
<a id="a78bfeb90f0c1812e726ec3092056bb52"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a78bfeb90f0c1812e726ec3092056bb52">◆ </a></span>statevec_sGateConj()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_sGateConj </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00278">278</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  {</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <a class="code" href="structComplex.html">Complex</a> term; </div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  term.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = 0;</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  term.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = -1;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <a class="code" href="QuEST__internal_8h.html#a8972669148af60d7e1c09687f69673d4">statevec_phaseShiftByTerm</a>(qureg, targetQubit, term);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> } </div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02940">statevec_phaseShiftByTerm()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00464">sGate()</a>.</p>
</div>
</div>
<a id="a6550462400942be61b171c8840b36aa1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6550462400942be61b171c8840b36aa1">◆ </a></span>statevec_sqrtSwapGate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_sqrtSwapGate </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>qb1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>qb2</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00383">383</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  {</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  </div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <a class="code" href="structComplexMatrix4.html">ComplexMatrix4</a> u = (<a class="code" href="structComplexMatrix4.html">ComplexMatrix4</a>) {.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>={{0}}, .imag={{0}}};</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[0][0]=1;</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[3][3]=1;</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[1][1] = .5; u.<a class="code" href="structComplexMatrix4.html#a1f6bb840b5a9e6252980cab7a14f1a35">imag</a>[1][1] = .5;</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[1][2] = .5; u.<a class="code" href="structComplexMatrix4.html#a1f6bb840b5a9e6252980cab7a14f1a35">imag</a>[1][2] =-.5;</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[2][1] = .5; u.<a class="code" href="structComplexMatrix4.html#a1f6bb840b5a9e6252980cab7a14f1a35">imag</a>[2][1] =-.5;</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[2][2] = .5; u.<a class="code" href="structComplexMatrix4.html#a1f6bb840b5a9e6252980cab7a14f1a35">imag</a>[2][2] = .5;</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  </div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <a class="code" href="QuEST__common_8c.html#aa8db9b25aae536cdf8054afb6503b7f4">statevec_twoQubitUnitary</a>(qureg, qb1, qb2, u);</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00128">ComplexMatrix4::imag</a>, <a class="el" href="QuEST_8h_source.html#l00127">ComplexMatrix4::real</a>, and <a class="el" href="QuEST__common_8c_source.html#l00516">statevec_twoQubitUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00611">sqrtSwapGate()</a>.</p>
</div>
</div>
<a id="a33cde9b6518d55a544eff20301a5d844"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a33cde9b6518d55a544eff20301a5d844">◆ </a></span>statevec_sqrtSwapGateConj()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_sqrtSwapGateConj </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>qb1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>qb2</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00396">396</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  {</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  </div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <a class="code" href="structComplexMatrix4.html">ComplexMatrix4</a> u = (<a class="code" href="structComplexMatrix4.html">ComplexMatrix4</a>) {.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>={{0}}, .imag={{0}}};</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[0][0]=1;</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[3][3]=1;</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[1][1] = .5; u.<a class="code" href="structComplexMatrix4.html#a1f6bb840b5a9e6252980cab7a14f1a35">imag</a>[1][1] =-.5;</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[1][2] = .5; u.<a class="code" href="structComplexMatrix4.html#a1f6bb840b5a9e6252980cab7a14f1a35">imag</a>[1][2] = .5;</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[2][1] = .5; u.<a class="code" href="structComplexMatrix4.html#a1f6bb840b5a9e6252980cab7a14f1a35">imag</a>[2][1] = .5;</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[2][2] = .5; u.<a class="code" href="structComplexMatrix4.html#a1f6bb840b5a9e6252980cab7a14f1a35">imag</a>[2][2] =-.5;</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  </div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <a class="code" href="QuEST__common_8c.html#aa8db9b25aae536cdf8054afb6503b7f4">statevec_twoQubitUnitary</a>(qureg, qb1, qb2, u);</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00128">ComplexMatrix4::imag</a>, <a class="el" href="QuEST_8h_source.html#l00127">ComplexMatrix4::real</a>, and <a class="el" href="QuEST__common_8c_source.html#l00516">statevec_twoQubitUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00611">sqrtSwapGate()</a>.</p>
</div>
</div>
<a id="ab7478fcaf6357ab202d72853b672e375"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab7478fcaf6357ab202d72853b672e375">◆ </a></span>statevec_swapQubitAmps()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_swapQubitAmps </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>qb1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>qb2</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01358">1358</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>  {</div>
<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>  </div>
<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>  <span class="comment">// perform locally if possible </span></div>
<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>  <span class="keywordtype">int</span> qbBig = (qb1 > qb2)? qb1 : qb2;</div>
<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, qbBig))</div>
<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  <span class="keywordflow">return</span> <a class="code" href="QuEST__cpu_8c.html#ab5b51a28caa8792a3f0c637409a694b0">statevec_swapQubitAmpsLocal</a>(qureg, qb1, qb2);</div>
<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>  </div>
<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>  <span class="comment">// do nothing if this node contains no amplitudes to swap</span></div>
<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> oddParityGlobalInd = <a class="code" href="QuEST__cpu__distributed_8c.html#a4f243eb101c8e63f16cfd50300364cb7">getGlobalIndOfOddParityInChunk</a>(qureg, qb1, qb2);</div>
<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>  <span class="keywordflow">if</span> (oddParityGlobalInd == -1)</div>
<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>  <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>  </div>
<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>  <span class="comment">// determine and swap amps with pair node</span></div>
<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>  <span class="keywordtype">int</span> pairRank = <a class="code" href="QuEST__gpu_8cu.html#a6aea6cf9c06d05a5765ad01311531627">flipBit</a>(<a class="code" href="QuEST__gpu_8cu.html#a6aea6cf9c06d05a5765ad01311531627">flipBit</a>(oddParityGlobalInd, qb1), qb2) / qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>  <a class="code" href="QuEST__cpu_8c.html#abe74a5a9db8340e37b80fbc77338894d">statevec_swapQubitAmpsDistributed</a>(qureg, pairRank, qb1, qb2);</div>
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00481">exchangeStateVectors()</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00095">flipBit()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01338">getGlobalIndOfOddParityInChunk()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03539">statevec_swapQubitAmpsDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l03496">statevec_swapQubitAmpsLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01441">statevec_multiControlledMultiQubitUnitary()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01385">statevec_multiControlledTwoQubitUnitary()</a>, and <a class="el" href="QuEST_8c_source.html#l00599">swapGate()</a>.</p>
</div>
</div>
<a id="a0bd738cb7e7cdea8f1ce1e640d427d4c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0bd738cb7e7cdea8f1ce1e640d427d4c">◆ </a></span>statevec_tGate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_tGate </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00271">271</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  {</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="structComplex.html">Complex</a> term; </div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  term.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = 1/sqrt(2);</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  term.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = 1/sqrt(2);</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <a class="code" href="QuEST__internal_8h.html#a8972669148af60d7e1c09687f69673d4">statevec_phaseShiftByTerm</a>(qureg, targetQubit, term);</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02940">statevec_phaseShiftByTerm()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00475">tGate()</a>.</p>
</div>
</div>
<a id="a3ce1b05fee70d930791513fec378d229"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ce1b05fee70d930791513fec378d229">◆ </a></span>statevec_tGateConj()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_tGateConj </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00285">285</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  {</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <a class="code" href="structComplex.html">Complex</a> term; </div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  term.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = 1/sqrt(2);</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  term.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = -1/sqrt(2);</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <a class="code" href="QuEST__internal_8h.html#a8972669148af60d7e1c09687f69673d4">statevec_phaseShiftByTerm</a>(qureg, targetQubit, term);</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02940">statevec_phaseShiftByTerm()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00475">tGate()</a>.</p>
</div>
</div>
<a id="aa8db9b25aae536cdf8054afb6503b7f4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8db9b25aae536cdf8054afb6503b7f4">◆ </a></span>statevec_twoQubitUnitary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_twoQubitUnitary </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> </td>
<td class="paramname"><em>u</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00516">516</a> of file <a class="el" href="QuEST__common_8c_source.html">QuEST_common.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  {</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  </div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ctrlMask = 0;</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <a class="code" href="QuEST__internal_8h.html#a877d988a763a52989484afc0f8d6ddf0">statevec_multiControlledTwoQubitUnitary</a>(qureg, ctrlMask, targetQubit1, targetQubit2, u);</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01385">statevec_multiControlledTwoQubitUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00383">statevec_sqrtSwapGate()</a>, <a class="el" href="QuEST__common_8c_source.html#l00396">statevec_sqrtSwapGateConj()</a>, and <a class="el" href="QuEST_8c_source.html#l00255">twoQubitUnitary()</a>.</p>
</div>
</div>
<a id="a4bea7ed7967083cbabd8a8e5acdd48c0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4bea7ed7967083cbabd8a8e5acdd48c0">◆ </a></span>statevec_unitary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_unitary </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structQureg.html">Qureg</a> </td>
<td class="paramname"><em>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int </td>
<td class="paramname"><em>targetQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> </td>
<td class="paramname"><em>u</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00883">883</a> of file <a class="el" href="QuEST__cpu__distributed_8c_source.html">QuEST_cpu_distributed.c</a>.</p>
<div class="fragment"><div class="line"><a name="l00884"></a><span class="lineno"> 884</span> {</div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  <span class="comment">// flag to require memory exchange. 1: an entire block fits on one rank, 0: at most half a block fits on one rank</span></div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <span class="keywordtype">int</span> useLocalDataOnly = <a class="code" href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a>(qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <a class="code" href="structComplex.html">Complex</a> rot1, rot2;</div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  </div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <span class="keywordtype">int</span> rankIsUpper;</div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  </div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <a class="code" href="QuEST__cpu_8c.html#a9f62ff38deae8ef012024d416d749c00">statevec_unitaryLocal</a>(qureg, targetQubit, u);</div>
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  rankIsUpper = <a class="code" href="QuEST__cpu__distributed_8c.html#a0552889d6f57d9e0ed8b209bf426482d">chunkIsUpper</a>(qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a5c9b2f129bdffaaba9857f6eddecbb17">getRotAngleFromUnitaryMatrix</a>(rankIsUpper, &rot1, &rot2, u);</div>
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#a7dba097f23f5d48dfdc9f3250444e2e4">getChunkPairId</a>(rankIsUpper, qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, targetQubit);</div>
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  </div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <span class="comment">// this rank's values are either in the upper of lower half of the block. </span></div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  <span class="comment">// send values to compactUnitaryDistributed in the correct order</span></div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <a class="code" href="QuEST__cpu_8c.html#a0ce2c2fd54df25495e99dc5b95bed4b2">statevec_unitaryDistributed</a>(qureg,rot1,rot2,</div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <a class="code" href="QuEST__cpu_8c.html#a0ce2c2fd54df25495e99dc5b95bed4b2">statevec_unitaryDistributed</a>(qureg,rot1,rot2,</div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  }</div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  }</div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  </div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  </div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00174">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00227">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00481">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00303">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00283">getRotAngleFromUnitaryMatrix()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00356">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00170">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00181">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00179">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02024">statevec_unitaryDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l01900">statevec_unitaryLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00347">unitary()</a>.</p>
</div>
</div>
</div><!-- contents -->
<div class="ttc" id="astructVector_html"><div class="ttname"><a href="structVector.html">Vector</a></div><div class="ttdoc">Represents a 3-vector of real numbers.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00148">QuEST.h:148</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_ae2b222fda52c10fb420cb3ac78ca31e4"><div class="ttname"><a href="QuEST__common_8c.html#ae2b222fda52c10fb420cb3ac78ca31e4">macro_setConjugateMatrix</a></div><div class="ttdeci">#define macro_setConjugateMatrix(dest, src, dim)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00092">QuEST_common.c:92</a></div></div>
<div class="ttc" id="astructComplexMatrix4_html_aeadc9893e1b16cdd585dac523e73926c"><div class="ttname"><a href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">ComplexMatrix4::real</a></div><div class="ttdeci">qreal real[4][4]</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00127">QuEST.h:127</a></div></div>
<div class="ttc" id="agroup__debug_html_ga8d31fe2d1ad4d01e2a1f5f6b8bc15b77"><div class="ttname"><a href="group__debug.html#ga8d31fe2d1ad4d01e2a1f5f6b8bc15b77">syncQuESTEnv</a></div><div class="ttdeci">void syncQuESTEnv(QuESTEnv env)</div><div class="ttdoc">Guarantees that all code up to the given point has been executed on all nodes (if running in distribu...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00162">QuEST_cpu_distributed.c:162</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_ab987904f721746d1176aba7ac6b566fa"><div class="ttname"><a href="QuEST__common_8c.html#ab987904f721746d1176aba7ac6b566fa">densmatr_mixKrausMap</a></div><div class="ttdeci">void densmatr_mixKrausMap(Qureg qureg, int target, ComplexMatrix2 *ops, int numOps)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00599">QuEST_common.c:599</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_a2ebf115d3bdd88f4b290b5218a5399d3"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#a2ebf115d3bdd88f4b290b5218a5399d3">compressPairVectorForSingleQubitDepolarise</a></div><div class="ttdeci">void compressPairVectorForSingleQubitDepolarise(Qureg qureg, const int targetQubit)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00545">QuEST_cpu_distributed.c:545</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a24f9ade18290c82bbb2c4a706b3d5999"><div class="ttname"><a href="QuEST__cpu_8c.html#a24f9ade18290c82bbb2c4a706b3d5999">statevec_hadamardLocal</a></div><div class="ttdeci">void statevec_hadamardLocal(Qureg qureg, const int targetQubit)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02834">QuEST_cpu.c:2834</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_adb4b0373425b282abed27742d0ce0872"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#adb4b0373425b282abed27742d0ce0872">getRotAngle</a></div><div class="ttdeci">static void getRotAngle(int chunkIsUpper, Complex *rot1, Complex *rot2, Complex alpha, Complex beta)</div><div class="ttdoc">Get rotation values for a given chunk.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00258">QuEST_cpu_distributed.c:258</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a939897137596bb73ad7a028d0beaaa10"><div class="ttname"><a href="QuEST__cpu_8c.html#a939897137596bb73ad7a028d0beaaa10">densmatr_calcHilbertSchmidtDistanceSquaredLocal</a></div><div class="ttdeci">qreal densmatr_calcHilbertSchmidtDistanceSquaredLocal(Qureg a, Qureg b)</div><div class="ttdoc">computes Tr((a-b) conjTrans(a-b)) = sum of abs values of (a-b)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00922">QuEST_cpu.c:922</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ac497197e66d7024fc6bf7ace120b3de5"><div class="ttname"><a href="QuEST__cpu_8c.html#ac497197e66d7024fc6bf7ace120b3de5">densmatr_mixTwoQubitDepolarisingDistributed</a></div><div class="ttdeci">void densmatr_mixTwoQubitDepolarisingDistributed(Qureg qureg, const int targetQubit, const int qubit2, qreal delta, qreal gamma)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00540">QuEST_cpu.c:540</a></div></div>
<div class="ttc" id="astructQuESTEnv_html_aa648bb336cf8598467cb62db00b9cee8"><div class="ttname"><a href="structQuESTEnv.html#aa648bb336cf8598467cb62db00b9cee8">QuESTEnv::rank</a></div><div class="ttdeci">int rank</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00201">QuEST.h:201</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_a2a6999e47bed978eb66f589c8abc7766"><div class="ttname"><a href="QuEST__common_8c.html#a2a6999e47bed978eb66f589c8abc7766">populateKrausSuperOperator4</a></div><div class="ttdeci">void populateKrausSuperOperator4(ComplexMatrixN *superOp, ComplexMatrix4 *ops, int numOps)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00566">QuEST_common.c:566</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a97f17a0969e16f9ce9b55abd46bd732a"><div class="ttname"><a href="QuEST__cpu_8c.html#a97f17a0969e16f9ce9b55abd46bd732a">statevec_controlledNotDistributed</a></div><div class="ttdeci">void statevec_controlledNotDistributed(Qureg qureg, const int controlQubit, ComplexArray stateVecIn, ComplexArray stateVecOut)</div><div class="ttdoc">Rotate a single qubit by {{0,1},{1,0}.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02612">QuEST_cpu.c:2612</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_a6dcb85ef8e1257813af0dc306082caf8"><div class="ttname"><a href="QuEST__common_8c.html#a6dcb85ef8e1257813af0dc306082caf8">populateKrausSuperOperatorN</a></div><div class="ttdeci">void populateKrausSuperOperatorN(ComplexMatrixN *superOp, ComplexMatrixN *ops, int numOps)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00570">QuEST_common.c:570</a></div></div>
<div class="ttc" id="aQuEST__cpu__internal_8h_html_a216d03e71c5a0a48089aee3401df4298"><div class="ttname"><a href="QuEST__cpu__internal_8h.html#a216d03e71c5a0a48089aee3401df4298">maskContainsBit</a></div><div class="ttdeci">static int maskContainsBit(long long int mask, int bitInd)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__internal_8h_source.html#l00034">QuEST_cpu_internal.h:34</a></div></div>
<div class="ttc" id="agroup__type_html_ga9df2f3d86be4a6e9aad481665e5e6753"><div class="ttname"><a href="group__type.html#ga9df2f3d86be4a6e9aad481665e5e6753">destroyComplexMatrixN</a></div><div class="ttdeci">void destroyComplexMatrixN(ComplexMatrixN m)</div><div class="ttdoc">Destroy a ComplexMatrixN instance created with createComplexMatrixN()</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8c_source.html#l01021">QuEST.c:1021</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_aef380928d1b0003411d6159ca6594cd5"><div class="ttname"><a href="QuEST__common_8c.html#aef380928d1b0003411d6159ca6594cd5">statevec_calcExpecPauliProd</a></div><div class="ttdeci">qreal statevec_calcExpecPauliProd(Qureg qureg, int *targetQubits, enum pauliOpType *pauliCodes, int numTargets, Qureg workspace)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00464">QuEST_common.c:464</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_af0ea25f00987af4c53f17c9cca62ab41"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#af0ea25f00987af4c53f17c9cca62ab41">isChunkToSkipInFindPZero</a></div><div class="ttdeci">static int isChunkToSkipInFindPZero(int chunkId, long long int chunkSize, int measureQubit)</div><div class="ttdoc">Find chunks to skip when calculating probability of qubit being zero.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l01254">QuEST_cpu_distributed.c:1254</a></div></div>
<div class="ttc" id="astructQureg_html_aba97773694870ef35e378c036f486bb7"><div class="ttname"><a href="structQureg.html#aba97773694870ef35e378c036f486bb7">Qureg::pairStateVec</a></div><div class="ttdeci">ComplexArray pairStateVec</div><div class="ttdoc">Temporary storage for a chunk of the state vector received from another process in the MPI version.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00181">QuEST.h:181</a></div></div>
<div class="ttc" id="agroup__type_html_gga1c703cf89629e4e9c7023cd402d67028a63800f45b01ccc2608f754aee850bf4a"><div class="ttname"><a href="group__type.html#gga1c703cf89629e4e9c7023cd402d67028a63800f45b01ccc2608f754aee850bf4a">PAULI_I</a></div><div class="ttdeci">@ PAULI_I</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00096">QuEST.h:96</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a430d98e35f1eae7f0815ac539057cf67"><div class="ttname"><a href="QuEST__cpu_8c.html#a430d98e35f1eae7f0815ac539057cf67">statevec_findProbabilityOfZeroDistributed</a></div><div class="ttdeci">qreal statevec_findProbabilityOfZeroDistributed(Qureg qureg)</div><div class="ttdoc">Measure the probability of a specified qubit being in the zero state across all amplitudes held in th...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03222">QuEST_cpu.c:3222</a></div></div>
<div class="ttc" id="agroup__type_html_ga815103261fb22ea9690e1427571df00e"><div class="ttname"><a href="group__type.html#ga815103261fb22ea9690e1427571df00e">createComplexMatrixN</a></div><div class="ttdeci">ComplexMatrixN createComplexMatrixN(int numQubits)</div><div class="ttdoc">Create (dynamically) a square complex matrix which can be passed to the multi-qubit general unitary f...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8c_source.html#l01000">QuEST.c:1000</a></div></div>
<div class="ttc" id="astructVector_html_ab33976d8fda2e44b770f71269d698a25"><div class="ttname"><a href="structVector.html#ab33976d8fda2e44b770f71269d698a25">Vector::z</a></div><div class="ttdeci">qreal z</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00150">QuEST.h:150</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_aa7f5f0bf7fa945d46eb51e79e00a8dfd"><div class="ttname"><a href="QuEST__cpu_8c.html#aa7f5f0bf7fa945d46eb51e79e00a8dfd">statevec_multiControlledTwoQubitUnitaryLocal</a></div><div class="ttdeci">void statevec_multiControlledTwoQubitUnitaryLocal(Qureg qureg, long long int ctrlMask, const int q1, const int q2, ComplexMatrix4 u)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l01715">QuEST_cpu.c:1715</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_af82f6c9317f51a2048ddd3eb24c2959c"><div class="ttname"><a href="QuEST__cpu_8c.html#af82f6c9317f51a2048ddd3eb24c2959c">densmatr_mixTwoQubitDepolarisingQ1LocalQ2DistributedPart3</a></div><div class="ttdeci">void densmatr_mixTwoQubitDepolarisingQ1LocalQ2DistributedPart3(Qureg qureg, const int targetQubit, const int qubit2, qreal delta, qreal gamma)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00631">QuEST_cpu.c:631</a></div></div>
<div class="ttc" id="astructQureg_html_aa3deb7163aab90a61e755a1f200f5413"><div class="ttname"><a href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">Qureg::numChunks</a></div><div class="ttdeci">int numChunks</div><div class="ttdoc">Number of chunks the state vector is broken up into – the number of MPI processes used.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00176">QuEST.h:176</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ab5b51a28caa8792a3f0c637409a694b0"><div class="ttname"><a href="QuEST__cpu_8c.html#ab5b51a28caa8792a3f0c637409a694b0">statevec_swapQubitAmpsLocal</a></div><div class="ttdeci">void statevec_swapQubitAmpsLocal(Qureg qureg, int qb1, int qb2)</div><div class="ttdoc">It is ensured that all amplitudes needing to be swapped are on this node.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03496">QuEST_cpu.c:3496</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_accae504dfcd6846159baa16a1e8263a0"><div class="ttname"><a href="QuEST__common_8c.html#accae504dfcd6846159baa16a1e8263a0">statevec_applyPauliProd</a></div><div class="ttdeci">void statevec_applyPauliProd(Qureg workspace, int *targetQubits, enum pauliOpType *pauliCodes, int numTargets)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00450">QuEST_common.c:450</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a37e522505286f17fe6ef74b9f607a5c6"><div class="ttname"><a href="QuEST__cpu_8c.html#a37e522505286f17fe6ef74b9f607a5c6">getBitMaskParity</a></div><div class="ttdeci">int getBitMaskParity(long long int mask)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03060">QuEST_cpu.c:3060</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a8d88b4ed94ab024e5e7b2f1f4f505b44"><div class="ttname"><a href="QuEST__internal_8h.html#a8d88b4ed94ab024e5e7b2f1f4f505b44">statevec_multiRotateZ</a></div><div class="ttdeci">void statevec_multiRotateZ(Qureg qureg, long long int mask, qreal angle)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03069">QuEST_cpu.c:3069</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a47dcab9a0e6b07ddde264ed924add26c"><div class="ttname"><a href="QuEST__internal_8h.html#a47dcab9a0e6b07ddde264ed924add26c">statevec_multiControlledMultiQubitUnitary</a></div><div class="ttdeci">void statevec_multiControlledMultiQubitUnitary(Qureg qureg, long long int ctrlMask, int *targs, const int numTargs, ComplexMatrixN u)</div><div class="ttdoc">This calls swapQubitAmps only when it would involve a distributed communication; if the qubit chunks ...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l01441">QuEST_cpu_distributed.c:1441</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ab02bce0ebbb8f624e8ced8b09b99cdef"><div class="ttname"><a href="QuEST__cpu_8c.html#ab02bce0ebbb8f624e8ced8b09b99cdef">statevec_collapseToKnownProbOutcomeLocal</a></div><div class="ttdeci">void statevec_collapseToKnownProbOutcomeLocal(Qureg qureg, int measureQubit, int outcome, qreal totalProbability)</div><div class="ttdoc">Update the state vector to be consistent with measuring measureQubit=0 if outcome=0 and measureQubit=...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03340">QuEST_cpu.c:3340</a></div></div>
<div class="ttc" id="aQuEST__gpu_8cu_html_a5cb8662afc6c644a46f7339c89bfd226"><div class="ttname"><a href="QuEST__gpu_8cu.html#a5cb8662afc6c644a46f7339c89bfd226">extractBit</a></div><div class="ttdeci">__forceinline__ __device__ int extractBit(int locationOfBitFromRight, long long int theEncodedNumber)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__gpu_8cu_source.html#l00082">QuEST_gpu.cu:82</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_ab321af37fe3490253e12b7c70b8d2a98"><div class="ttname"><a href="QuEST__internal_8h.html#ab321af37fe3490253e12b7c70b8d2a98">densmatr_collapseToKnownProbOutcome</a></div><div class="ttdeci">void densmatr_collapseToKnownProbOutcome(Qureg qureg, const int measureQubit, int outcome, qreal outcomeProb)</div><div class="ttdoc">Renorms (/prob) every | * outcome * >< * outcome * | state, setting all others to zero.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00784">QuEST_cpu.c:784</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_afa06d0143cea46f1e425c61ac6f6f9a2"><div class="ttname"><a href="QuEST__cpu_8c.html#afa06d0143cea46f1e425c61ac6f6f9a2">statevec_findProbabilityOfZeroLocal</a></div><div class="ttdeci">qreal statevec_findProbabilityOfZeroLocal(Qureg qureg, const int measureQubit)</div><div class="ttdoc">Measure the total probability of a specified qubit being in the zero state across all amplitudes in t...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03166">QuEST_cpu.c:3166</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_af910c7cf2b85bdc2c399cfe8dbfb8b9c"><div class="ttname"><a href="QuEST__cpu_8c.html#af910c7cf2b85bdc2c399cfe8dbfb8b9c">densmatr_calcPurityLocal</a></div><div class="ttdeci">qreal densmatr_calcPurityLocal(Qureg qureg)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00860">QuEST_cpu.c:860</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_a041bb75200ee316de7b90667a4fe04f3"><div class="ttname"><a href="QuEST__common_8c.html#a041bb75200ee316de7b90667a4fe04f3">getUnitVector</a></div><div class="ttdeci">Vector getUnitVector(Vector vec)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00077">QuEST_common.c:77</a></div></div>
<div class="ttc" id="astructComplexMatrix4_html"><div class="ttname"><a href="structComplexMatrix4.html">ComplexMatrix4</a></div><div class="ttdoc">Represents a 4x4 matrix of complex numbers.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00125">QuEST.h:125</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a758bad4237ff0bf3b4ff5be626a982ae"><div class="ttname"><a href="QuEST__cpu_8c.html#a758bad4237ff0bf3b4ff5be626a982ae">statevec_initBlankState</a></div><div class="ttdeci">void statevec_initBlankState(Qureg qureg)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l01366">QuEST_cpu.c:1366</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_a71b3ae4402c1c5039d3086ca0e47a522"><div class="ttname"><a href="QuEST__common_8c.html#a71b3ae4402c1c5039d3086ca0e47a522">getComplexPairFromRotation</a></div><div class="ttdeci">void getComplexPairFromRotation(qreal angle, Vector axis, Complex *alpha, Complex *beta)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00113">QuEST_common.c:113</a></div></div>
<div class="ttc" id="astructComplexMatrixN_html"><div class="ttname"><a href="structComplexMatrixN.html">ComplexMatrixN</a></div><div class="ttdoc">Represents a general 2^N by 2^N matrix of complex numbers.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00136">QuEST.h:136</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a464efbd1d7ca5a7b25c83ada001955c2"><div class="ttname"><a href="QuEST__cpu_8c.html#a464efbd1d7ca5a7b25c83ada001955c2">statevec_pauliXDistributed</a></div><div class="ttdeci">void statevec_pauliXDistributed(Qureg qureg, ComplexArray stateVecIn, ComplexArray stateVecOut)</div><div class="ttdoc">Rotate a single qubit by {{0,1},{1,0}.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02522">QuEST_cpu.c:2522</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_ae66dc6569c6e4008c33d6739db422c08"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#ae66dc6569c6e4008c33d6739db422c08">getChunkOuterBlockPairId</a></div><div class="ttdeci">static int getChunkOuterBlockPairId(int chunkIsUpper, int chunkId, long long int chunkSize, int targetQubit, int numQubits)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00314">QuEST_cpu_distributed.c:314</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_a95af772d87c461fc8abfd6d47b752ac2"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#a95af772d87c461fc8abfd6d47b752ac2">copyVecIntoMatrixPairState</a></div><div class="ttdeci">void copyVecIntoMatrixPairState(Qureg matr, Qureg vec)</div><div class="ttdoc">This copies/clones vec (a statevector) into every node's matr pairState.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00371">QuEST_cpu_distributed.c:371</a></div></div>
<div class="ttc" id="agroup__type_html_ga7740e349b4f8bae6451547680f0ce2d6"><div class="ttname"><a href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a></div><div class="ttdeci">#define qreal</div></div>
<div class="ttc" id="aQuEST__common_8c_html_a4da103b16292ffd99197d05c5fa83712"><div class="ttname"><a href="QuEST__common_8c.html#a4da103b16292ffd99197d05c5fa83712">macro_allocStackComplexMatrixN</a></div><div class="ttdeci">#define macro_allocStackComplexMatrixN(matrix, numQubits)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00628">QuEST_common.c:628</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_a37dae401754961c9100b3c0907913c3e"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a></div><div class="ttdeci">void exchangePairStateVectorHalves(Qureg qureg, int pairRank)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00511">QuEST_cpu_distributed.c:511</a></div></div>
<div class="ttc" id="agroup__type_html_gga1c703cf89629e4e9c7023cd402d67028a7abac7bb5b71e17382014c443244ad5c"><div class="ttname"><a href="group__type.html#gga1c703cf89629e4e9c7023cd402d67028a7abac7bb5b71e17382014c443244ad5c">PAULI_X</a></div><div class="ttdeci">@ PAULI_X</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00096">QuEST.h:96</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_ab7478fcaf6357ab202d72853b672e375"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a></div><div class="ttdeci">void statevec_swapQubitAmps(Qureg qureg, int qb1, int qb2)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l01358">QuEST_cpu_distributed.c:1358</a></div></div>
<div class="ttc" id="astructQureg_html_a0a86e8a50ea8c998b4a0a6640c5a1218"><div class="ttname"><a href="structQureg.html#a0a86e8a50ea8c998b4a0a6640c5a1218">Qureg::numQubitsInStateVec</a></div><div class="ttdeci">int numQubitsInStateVec</div><div class="ttdoc">Number of qubits in the state-vector - this is double the number represented for mixed states.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00167">QuEST.h:167</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_a13a7c39357ba9a30339d7a6171aeda8d"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#a13a7c39357ba9a30339d7a6171aeda8d">compressPairVectorForTwoQubitDepolarise</a></div><div class="ttdeci">void compressPairVectorForTwoQubitDepolarise(Qureg qureg, const int targetQubit, const int qubit2)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00611">QuEST_cpu_distributed.c:611</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a11c9685e4ad1f44cfd6243e0c4435893"><div class="ttname"><a href="QuEST__cpu_8c.html#a11c9685e4ad1f44cfd6243e0c4435893">statevec_controlledNotLocal</a></div><div class="ttdeci">void statevec_controlledNotLocal(Qureg qureg, const int controlQubit, const int targetQubit)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02550">QuEST_cpu.c:2550</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_a7dba097f23f5d48dfdc9f3250444e2e4"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#a7dba097f23f5d48dfdc9f3250444e2e4">getChunkPairId</a></div><div class="ttdeci">static int getChunkPairId(int chunkIsUpper, int chunkId, long long int chunkSize, int targetQubit)</div><div class="ttdoc">get position of corresponding chunk, holding values required to update values in my chunk (with chunk...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00303">QuEST_cpu_distributed.c:303</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a6153547f245c05874161a105e9a2f02c"><div class="ttname"><a href="QuEST__internal_8h.html#a6153547f245c05874161a105e9a2f02c">densmatr_calcTotalProb</a></div><div class="ttdeci">qreal densmatr_calcTotalProb(Qureg qureg)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00053">QuEST_cpu_distributed.c:53</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_abd1285091450c7c2806cc26c71eb5df2"><div class="ttname"><a href="QuEST__common_8c.html#abd1285091450c7c2806cc26c71eb5df2">getQubitBitMask</a></div><div class="ttdeci">long long int getQubitBitMask(int *qubits, const int numQubits)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00043">QuEST_common.c:43</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a7ea68e9132ed9db9c242353a33dba2f0"><div class="ttname"><a href="QuEST__cpu_8c.html#a7ea68e9132ed9db9c242353a33dba2f0">statevec_collapseToOutcomeDistributedSetZero</a></div><div class="ttdeci">void statevec_collapseToOutcomeDistributedSetZero(Qureg qureg)</div><div class="ttdoc">Set all amplitudes in one chunk to 0.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03461">QuEST_cpu.c:3461</a></div></div>
<div class="ttc" id="astructQureg_html_ac2929e681d3d95591c18cf168dbbe4f0"><div class="ttname"><a href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">Qureg::chunkId</a></div><div class="ttdeci">int chunkId</div><div class="ttdoc">The position of the chunk of the state vector held by this process in the full state vector.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00174">QuEST.h:174</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a7cc805451304b8ad4429c7107f90ab3b"><div class="ttname"><a href="QuEST__cpu_8c.html#a7cc805451304b8ad4429c7107f90ab3b">densmatr_mixDampingLocal</a></div><div class="ttdeci">void densmatr_mixDampingLocal(Qureg qureg, const int targetQubit, qreal damping)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00174">QuEST_cpu.c:174</a></div></div>
<div class="ttc" id="astructVector_html_abc3cfc6c8e297b1153a373d84b981e6b"><div class="ttname"><a href="structVector.html#abc3cfc6c8e297b1153a373d84b981e6b">Vector::y</a></div><div class="ttdeci">qreal y</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00150">QuEST.h:150</a></div></div>
<div class="ttc" id="astructComplexMatrix2_html_a3a2b60a9e00ccef054a6de3b9307c1be"><div class="ttname"><a href="structComplexMatrix2.html#a3a2b60a9e00ccef054a6de3b9307c1be">ComplexMatrix2::imag</a></div><div class="ttdeci">qreal imag[2][2]</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00117">QuEST.h:117</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ae757d3b816aa7ba7bea13334a9b77441"><div class="ttname"><a href="QuEST__cpu_8c.html#ae757d3b816aa7ba7bea13334a9b77441">statevec_multiControlledUnitaryLocal</a></div><div class="ttdeci">void statevec_multiControlledUnitaryLocal(Qureg qureg, const int targetQubit, long long int ctrlQubitsMask, long long int ctrlFlipMask, ComplexMatrix2 u)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02140">QuEST_cpu.c:2140</a></div></div>
<div class="ttc" id="astructVector_html_a0d0459a5b731ac5fb3dff2c6134e6e88"><div class="ttname"><a href="structVector.html#a0d0459a5b731ac5fb3dff2c6134e6e88">Vector::x</a></div><div class="ttdeci">qreal x</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00150">QuEST.h:150</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a0e5527c6e144fab8062ea5296e8bdf2a"><div class="ttname"><a href="QuEST__cpu_8c.html#a0e5527c6e144fab8062ea5296e8bdf2a">statevec_controlledCompactUnitaryLocal</a></div><div class="ttdeci">void statevec_controlledCompactUnitaryLocal(Qureg qureg, const int controlQubit, const int targetQubit, Complex alpha, Complex beta)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02069">QuEST_cpu.c:2069</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_a9d19fc690afb425d0df5feb09be567a3"><div class="ttname"><a href="QuEST__common_8c.html#a9d19fc690afb425d0df5feb09be567a3">generateMeasurementOutcome</a></div><div class="ttdeci">int generateMeasurementOutcome(qreal zeroProb, qreal *outcomeProb)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00154">QuEST_common.c:154</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_aa8db9b25aae536cdf8054afb6503b7f4"><div class="ttname"><a href="QuEST__common_8c.html#aa8db9b25aae536cdf8054afb6503b7f4">statevec_twoQubitUnitary</a></div><div class="ttdeci">void statevec_twoQubitUnitary(Qureg qureg, const int targetQubit1, const int targetQubit2, ComplexMatrix4 u)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00516">QuEST_common.c:516</a></div></div>
<div class="ttc" id="astructQureg_html_ab0ea0358482b62f43fdd781469607d97"><div class="ttname"><a href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">Qureg::numAmpsPerChunk</a></div><div class="ttdeci">long long int numAmpsPerChunk</div><div class="ttdoc">Number of probability amplitudes held in stateVec by this process In the non-MPI version,...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00170">QuEST.h:170</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a3510f01d4d15dcc545564eb84c668cad"><div class="ttname"><a href="QuEST__cpu_8c.html#a3510f01d4d15dcc545564eb84c668cad">densmatr_mixTwoQubitDepolarisingLocal</a></div><div class="ttdeci">void densmatr_mixTwoQubitDepolarisingLocal(Qureg qureg, int qubit1, int qubit2, qreal delta, qreal gamma)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00385">QuEST_cpu.c:385</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_a5c9b2f129bdffaaba9857f6eddecbb17"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#a5c9b2f129bdffaaba9857f6eddecbb17">getRotAngleFromUnitaryMatrix</a></div><div class="ttdeci">static void getRotAngleFromUnitaryMatrix(int chunkIsUpper, Complex *rot1, Complex *rot2, ComplexMatrix2 u)</div><div class="ttdoc">Get rotation values for a given chunk given a unitary matrix.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00283">QuEST_cpu_distributed.c:283</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_acc485aea8dccf1678f80fa9c5df6724a"><div class="ttname"><a href="QuEST__cpu_8c.html#acc485aea8dccf1678f80fa9c5df6724a">densmatr_mixDepolarisingDistributed</a></div><div class="ttdeci">void densmatr_mixDepolarisingDistributed(Qureg qureg, const int targetQubit, qreal depolLevel)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00224">QuEST_cpu.c:224</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_af3db21114efc431ae7a7ae06fc2d7b5b"><div class="ttname"><a href="QuEST__common_8c.html#af3db21114efc431ae7a7ae06fc2d7b5b">densmatr_applyKrausSuperoperator</a></div><div class="ttdeci">void densmatr_applyKrausSuperoperator(Qureg qureg, int target, ComplexMatrix4 superOp)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00575">QuEST_common.c:575</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a758bad4237ff0bf3b4ff5be626a982ae"><div class="ttname"><a href="QuEST__internal_8h.html#a758bad4237ff0bf3b4ff5be626a982ae">statevec_initBlankState</a></div><div class="ttdeci">void statevec_initBlankState(Qureg qureg)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l01366">QuEST_cpu.c:1366</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_abd00ba1321c9bd43c3a9119f5b3ed1be"><div class="ttname"><a href="QuEST__common_8c.html#abd00ba1321c9bd43c3a9119f5b3ed1be">populateKrausSuperOperator2</a></div><div class="ttdeci">void populateKrausSuperOperator2(ComplexMatrix4 *superOp, ComplexMatrix2 *ops, int numOps)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00562">QuEST_common.c:562</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ab14681cbcc8f530333a9570328886b32"><div class="ttname"><a href="QuEST__cpu_8c.html#ab14681cbcc8f530333a9570328886b32">statevec_controlledUnitaryDistributed</a></div><div class="ttdeci">void statevec_controlledUnitaryDistributed(Qureg qureg, const int controlQubit, Complex rot1, Complex rot2, ComplexArray stateVecUp, ComplexArray stateVecLo, ComplexArray stateVecOut)</div><div class="ttdoc">Rotate a single qubit in the state vector of probability amplitudes, given two complex numbers alpha ...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02347">QuEST_cpu.c:2347</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a0abdff5f6065f9d57065345e6d90fc94"><div class="ttname"><a href="QuEST__cpu_8c.html#a0abdff5f6065f9d57065345e6d90fc94">alternateNormZeroingSomeAmpBlocks</a></div><div class="ttdeci">void alternateNormZeroingSomeAmpBlocks(Qureg qureg, qreal norm, int normFirst, long long int startAmpInd, long long int numAmps, long long int blockSize)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00753">QuEST_cpu.c:753</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_aa4b77089145184d990848cd66993aa8b"><div class="ttname"><a href="QuEST__internal_8h.html#aa4b77089145184d990848cd66993aa8b">statevec_cloneQureg</a></div><div class="ttdeci">void statevec_cloneQureg(Qureg targetQureg, Qureg copyQureg)</div><div class="ttdoc">works for both statevectors and density matrices</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l01474">QuEST_cpu.c:1474</a></div></div>
<div class="ttc" id="astructQuESTEnv_html_af22aacd7c9905accae28484785c193b4"><div class="ttname"><a href="structQuESTEnv.html#af22aacd7c9905accae28484785c193b4">QuESTEnv::numRanks</a></div><div class="ttdeci">int numRanks</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00202">QuEST.h:202</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a0a7a35628b1c1eb47336deb9afda5b68"><div class="ttname"><a href="QuEST__cpu_8c.html#a0a7a35628b1c1eb47336deb9afda5b68">statevec_compactUnitaryDistributed</a></div><div class="ttdeci">void statevec_compactUnitaryDistributed(Qureg qureg, Complex rot1, Complex rot2, ComplexArray stateVecUp, ComplexArray stateVecLo, ComplexArray stateVecOut)</div><div class="ttdoc">Rotate a single qubit in the state vector of probability amplitudes, given two complex numbers alpha ...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l01969">QuEST_cpu.c:1969</a></div></div>
<div class="ttc" id="astructComplexMatrix4_html_a1f6bb840b5a9e6252980cab7a14f1a35"><div class="ttname"><a href="structComplexMatrix4.html#a1f6bb840b5a9e6252980cab7a14f1a35">ComplexMatrix4::imag</a></div><div class="ttdeci">qreal imag[4][4]</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00128">QuEST.h:128</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_aa5865e66a6e0993ae17d400c9ee0eb43"><div class="ttname"><a href="QuEST__cpu_8c.html#aa5865e66a6e0993ae17d400c9ee0eb43">statevec_compactUnitaryLocal</a></div><div class="ttdeci">void statevec_compactUnitaryLocal(Qureg qureg, const int targetQubit, Complex alpha, Complex beta)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l01656">QuEST_cpu.c:1656</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a101e7ef38c5d654a697dafe14562dcee"><div class="ttname"><a href="QuEST__cpu_8c.html#a101e7ef38c5d654a697dafe14562dcee">densmatr_findProbabilityOfZeroLocal</a></div><div class="ttdeci">qreal densmatr_findProbabilityOfZeroLocal(Qureg qureg, const int measureQubit)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03111">QuEST_cpu.c:3111</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a8972669148af60d7e1c09687f69673d4"><div class="ttname"><a href="QuEST__internal_8h.html#a8972669148af60d7e1c09687f69673d4">statevec_phaseShiftByTerm</a></div><div class="ttdeci">void statevec_phaseShiftByTerm(Qureg qureg, const int targetQubit, Complex term)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02940">QuEST_cpu.c:2940</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_ae01c3eb75fd32de1a7e1dbc7a33a21e3"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a></div><div class="ttdeci">void exchangeStateVectors(Qureg qureg, int pairRank)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00481">QuEST_cpu_distributed.c:481</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a031a99b7e97779f3dc782feffe86e779"><div class="ttname"><a href="QuEST__cpu_8c.html#a031a99b7e97779f3dc782feffe86e779">normaliseSomeAmps</a></div><div class="ttdeci">void normaliseSomeAmps(Qureg qureg, qreal norm, long long int startInd, long long int numAmps)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00743">QuEST_cpu.c:743</a></div></div>
<div class="ttc" id="agroup__type_html_gga1c703cf89629e4e9c7023cd402d67028a2c64a9aaee27f6bcfef894d159e759bd"><div class="ttname"><a href="group__type.html#gga1c703cf89629e4e9c7023cd402d67028a2c64a9aaee27f6bcfef894d159e759bd">PAULI_Y</a></div><div class="ttdeci">@ PAULI_Y</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00096">QuEST.h:96</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a5090b080392ab9be8fcf538161d4e5c1"><div class="ttname"><a href="QuEST__internal_8h.html#a5090b080392ab9be8fcf538161d4e5c1">densmatr_mixTwoQubitDephasing</a></div><div class="ttdeci">void densmatr_mixTwoQubitDephasing(Qureg qureg, const int qubit1, const int qubit2, qreal dephase)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00084">QuEST_cpu.c:84</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a1b36518c8fbbc3a5084bb4ad1fb05ea5"><div class="ttname"><a href="QuEST__cpu_8c.html#a1b36518c8fbbc3a5084bb4ad1fb05ea5">densmatr_initPureStateLocal</a></div><div class="ttdeci">void densmatr_initPureStateLocal(Qureg targetQureg, Qureg copyQureg)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l01183">QuEST_cpu.c:1183</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a7ebd3198a198f4cd20840f64fd8b84d0"><div class="ttname"><a href="QuEST__internal_8h.html#a7ebd3198a198f4cd20840f64fd8b84d0">statevec_calcInnerProduct</a></div><div class="ttdeci">Complex statevec_calcInnerProduct(Qureg bra, Qureg ket)</div><div class="ttdoc">Terrible code which unnecessarily individually computes and sums the real and imaginary components of...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00035">QuEST_cpu_distributed.c:35</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_ad64a23933361fafc1b6b1787759c2663"><div class="ttname"><a href="QuEST__internal_8h.html#ad64a23933361fafc1b6b1787759c2663">statevec_setWeightedQureg</a></div><div class="ttdeci">void statevec_setWeightedQureg(Complex fac1, Qureg qureg1, Complex fac2, Qureg qureg2, Complex facOut, Qureg out)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03579">QuEST_cpu.c:3579</a></div></div>
<div class="ttc" id="aQuEST__gpu_8cu_html_a6aea6cf9c06d05a5765ad01311531627"><div class="ttname"><a href="QuEST__gpu_8cu.html#a6aea6cf9c06d05a5765ad01311531627">flipBit</a></div><div class="ttdeci">__forceinline__ __device__ long long int flipBit(long long int number, int bitInd)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__gpu_8cu_source.html#l00095">QuEST_gpu.cu:95</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_acd82c94cfac89eacb901348ff0d06af8"><div class="ttname"><a href="QuEST__cpu_8c.html#acd82c94cfac89eacb901348ff0d06af8">statevec_collapseToKnownProbOutcomeDistributedRenorm</a></div><div class="ttdeci">void statevec_collapseToKnownProbOutcomeDistributedRenorm(Qureg qureg, const int measureQubit, const qreal totalProbability)</div><div class="ttdoc">Renormalise parts of the state vector where measureQubit=0 or 1, based on the total probability of th...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03422">QuEST_cpu.c:3422</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_ab33cdf01831c4545e51299178acf7f27"><div class="ttname"><a href="QuEST__internal_8h.html#ab33cdf01831c4545e51299178acf7f27">statevec_calcProbOfOutcome</a></div><div class="ttdeci">qreal statevec_calcProbOfOutcome(Qureg qureg, const int measureQubit, int outcome)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l01263">QuEST_cpu_distributed.c:1263</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a1807899a1c39506427433739562670ec"><div class="ttname"><a href="QuEST__cpu_8c.html#a1807899a1c39506427433739562670ec">densmatr_mixDepolarisingLocal</a></div><div class="ttdeci">void densmatr_mixDepolarisingLocal(Qureg qureg, const int targetQubit, qreal depolLevel)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00125">QuEST_cpu.c:125</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_ae7f25bb40734e18a992403b17355893b"><div class="ttname"><a href="QuEST__internal_8h.html#ae7f25bb40734e18a992403b17355893b">statevec_collapseToKnownProbOutcome</a></div><div class="ttdeci">void statevec_collapseToKnownProbOutcome(Qureg qureg, const int measureQubit, int outcome, qreal outcomeProb)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l01301">QuEST_cpu_distributed.c:1301</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_abd509244d57657e148e4084c5ab5d28f"><div class="ttname"><a href="QuEST__internal_8h.html#abd509244d57657e148e4084c5ab5d28f">statevec_getImagAmp</a></div><div class="ttdeci">qreal statevec_getImagAmp(Qureg qureg, long long int index)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00208">QuEST_cpu_distributed.c:208</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a08392b1b27d10e3b8a8648a5afeaa629"><div class="ttname"><a href="QuEST__cpu_8c.html#a08392b1b27d10e3b8a8648a5afeaa629">densmatr_calcInnerProductLocal</a></div><div class="ttdeci">qreal densmatr_calcInnerProductLocal(Qureg a, Qureg b)</div><div class="ttdoc">computes Tr(conjTrans(a) b) = sum of (a_ij^* b_ij)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00957">QuEST_cpu.c:957</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_a28be36627b2dd9a0da63dd6f60121b06"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#a28be36627b2dd9a0da63dd6f60121b06">getChunkIdFromIndex</a></div><div class="ttdeci">static int getChunkIdFromIndex(Qureg qureg, long long int index)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00194">QuEST_cpu_distributed.c:194</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a842aaecd6d6cdc194c0b7c84623d2111"><div class="ttname"><a href="QuEST__cpu_8c.html#a842aaecd6d6cdc194c0b7c84623d2111">statevec_pauliXLocal</a></div><div class="ttdeci">void statevec_pauliXLocal(Qureg qureg, const int targetQubit)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02464">QuEST_cpu.c:2464</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ac0c120ac374b402c576c4b38bcda9992"><div class="ttname"><a href="QuEST__cpu_8c.html#ac0c120ac374b402c576c4b38bcda9992">statevec_controlledUnitaryLocal</a></div><div class="ttdeci">void statevec_controlledUnitaryLocal(Qureg qureg, const int controlQubit, const int targetQubit, ComplexMatrix2 u)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02207">QuEST_cpu.c:2207</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a0ce2c2fd54df25495e99dc5b95bed4b2"><div class="ttname"><a href="QuEST__cpu_8c.html#a0ce2c2fd54df25495e99dc5b95bed4b2">statevec_unitaryDistributed</a></div><div class="ttdeci">void statevec_unitaryDistributed(Qureg qureg, Complex rot1, Complex rot2, ComplexArray stateVecUp, ComplexArray stateVecLo, ComplexArray stateVecOut)</div><div class="ttdoc">Apply a unitary operation to a single qubit given a subset of the state vector with upper and lower b...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02024">QuEST_cpu.c:2024</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_ad405e3fac20997043e0236b751e44270"><div class="ttname"><a href="QuEST__internal_8h.html#ad405e3fac20997043e0236b751e44270">densmatr_calcProbOfOutcome</a></div><div class="ttdeci">qreal densmatr_calcProbOfOutcome(Qureg qureg, const int measureQubit, int outcome)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l01279">QuEST_cpu_distributed.c:1279</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_a076fe6125da4d6037b8bc4d912df4015"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#a076fe6125da4d6037b8bc4d912df4015">densityMatrixBlockFitsInChunk</a></div><div class="ttdeci">static int densityMatrixBlockFitsInChunk(long long int chunkSize, int numQubits, int targetQubit)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00363">QuEST_cpu_distributed.c:363</a></div></div>
<div class="ttc" id="astructQureg_html_a441e4cacef6bd17adb9813c7442d42fe"><div class="ttname"><a href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">Qureg::stateVec</a></div><div class="ttdeci">ComplexArray stateVec</div><div class="ttdoc">Computational state amplitudes - a subset thereof in the MPI version.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00179">QuEST.h:179</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a9f62ff38deae8ef012024d416d749c00"><div class="ttname"><a href="QuEST__cpu_8c.html#a9f62ff38deae8ef012024d416d749c00">statevec_unitaryLocal</a></div><div class="ttdeci">void statevec_unitaryLocal(Qureg qureg, const int targetQubit, ComplexMatrix2 u)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l01900">QuEST_cpu.c:1900</a></div></div>
<div class="ttc" id="astructComplexMatrix2_html_a3ea98d545b67a190ee6abe936c72076f"><div class="ttname"><a href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">ComplexMatrix2::real</a></div><div class="ttdeci">qreal real[2][2]</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00116">QuEST.h:116</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_a4d043bb0cee54a5f94faf3ffc34a6790"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#a4d043bb0cee54a5f94faf3ffc34a6790">halfMatrixBlockFitsInChunk</a></div><div class="ttdeci">static int halfMatrixBlockFitsInChunk(long long int chunkSize, int targetQubit)</div><div class="ttdoc">return whether the current qubit rotation will use blocks that fit within a single chunk.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00356">QuEST_cpu_distributed.c:356</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a623e5479f5dd45e87fe2acef55620771"><div class="ttname"><a href="QuEST__cpu_8c.html#a623e5479f5dd45e87fe2acef55620771">statevec_multiControlledUnitaryDistributed</a></div><div class="ttdeci">void statevec_multiControlledUnitaryDistributed(Qureg qureg, const int targetQubit, long long int ctrlQubitsMask, long long int ctrlFlipMask, Complex rot1, Complex rot2, ComplexArray stateVecUp, ComplexArray stateVecLo, ComplexArray stateVecOut)</div><div class="ttdoc">Apply a unitary operation to a single qubit in the state vector of probability amplitudes,...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02413">QuEST_cpu.c:2413</a></div></div>
<div class="ttc" id="astructQureg_html_acf78445e9435d09f44f0cc832c6aee79"><div class="ttname"><a href="structQureg.html#acf78445e9435d09f44f0cc832c6aee79">Qureg::isDensityMatrix</a></div><div class="ttdeci">int isDensityMatrix</div><div class="ttdoc">Whether this instance is a density-state representation.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00163">QuEST.h:163</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a47b467a5445c7f15d1a8b0b2ec0ef2de"><div class="ttname"><a href="QuEST__internal_8h.html#a47b467a5445c7f15d1a8b0b2ec0ef2de">statevec_controlledCompactUnitary</a></div><div class="ttdeci">void statevec_controlledCompactUnitary(Qureg qureg, const int controlQubit, const int targetQubit, Complex alpha, Complex beta)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00922">QuEST_cpu_distributed.c:922</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a3ad35691d74b79e759c0fc53862c68b5"><div class="ttname"><a href="QuEST__cpu_8c.html#a3ad35691d74b79e759c0fc53862c68b5">statevec_controlledPauliYDistributed</a></div><div class="ttdeci">void statevec_controlledPauliYDistributed(Qureg qureg, const int controlQubit, ComplexArray stateVecIn, ComplexArray stateVecOut, const int conjFac)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02793">QuEST_cpu.c:2793</a></div></div>
<div class="ttc" id="astructComplexMatrixN_html_a606f7afbc3f65a596bdca21cb43be6a8"><div class="ttname"><a href="structComplexMatrixN.html#a606f7afbc3f65a596bdca21cb43be6a8">ComplexMatrixN::numQubits</a></div><div class="ttdeci">int numQubits</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00138">QuEST.h:138</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_a4f243eb101c8e63f16cfd50300364cb7"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#a4f243eb101c8e63f16cfd50300364cb7">getGlobalIndOfOddParityInChunk</a></div><div class="ttdeci">long long int getGlobalIndOfOddParityInChunk(Qureg qureg, int qb1, int qb2)</div><div class="ttdoc">returns -1 if this node contains no amplitudes where qb1 and qb2 have opposite parity,...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l01338">QuEST_cpu_distributed.c:1338</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a8edf5f2066b05fb343931f45e2bec8f8"><div class="ttname"><a href="QuEST__cpu_8c.html#a8edf5f2066b05fb343931f45e2bec8f8">statevec_pauliYLocal</a></div><div class="ttdeci">void statevec_pauliYLocal(Qureg qureg, const int targetQubit, const int conjFac)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02647">QuEST_cpu.c:2647</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_acc5726bc7f899d5fd85454ffcc64f60c"><div class="ttname"><a href="QuEST__cpu_8c.html#acc5726bc7f899d5fd85454ffcc64f60c">statevec_multiControlledMultiQubitUnitaryLocal</a></div><div class="ttdeci">void statevec_multiControlledMultiQubitUnitaryLocal(Qureg qureg, long long int ctrlMask, int *targs, const int numTargs, ComplexMatrixN u)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l01814">QuEST_cpu.c:1814</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_a3d39314af5d88822d4aefb5e9cc4e2f6"><div class="ttname"><a href="QuEST__common_8c.html#a3d39314af5d88822d4aefb5e9cc4e2f6">densmatr_applyTwoQubitKrausSuperoperator</a></div><div class="ttdeci">void densmatr_applyTwoQubitKrausSuperoperator(Qureg qureg, int target1, int target2, ComplexMatrixN superOp)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00581">QuEST_common.c:581</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ae90f82418e0aa67218d733dbbc681998"><div class="ttname"><a href="QuEST__cpu_8c.html#ae90f82418e0aa67218d733dbbc681998">densmatr_mixTwoQubitDepolarisingLocalPart1</a></div><div class="ttdeci">void densmatr_mixTwoQubitDepolarisingLocalPart1(Qureg qureg, int qubit1, int qubit2, qreal delta)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00487">QuEST_cpu.c:487</a></div></div>
<div class="ttc" id="astructQureg_html_ad08dff5316b8937f4b2a1417591543dc"><div class="ttname"><a href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">Qureg::numQubitsRepresented</a></div><div class="ttdeci">int numQubitsRepresented</div><div class="ttdoc">The number of qubits represented in either the state-vector or density matrix.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00165">QuEST.h:165</a></div></div>
<div class="ttc" id="astructQureg_html_adef4935cac95763c29164cf99b144ed4"><div class="ttname"><a href="structQureg.html#adef4935cac95763c29164cf99b144ed4">Qureg::numAmpsTotal</a></div><div class="ttdeci">long long int numAmpsTotal</div><div class="ttdoc">Total number of amplitudes, which are possibly distributed among machines.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00172">QuEST.h:172</a></div></div>
<div class="ttc" id="astructComplex_html_ab5b2e2eca02131fc74b289a83636cbe3"><div class="ttname"><a href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">Complex::real</a></div><div class="ttdeci">qreal real</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00105">QuEST.h:105</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_abe74a5a9db8340e37b80fbc77338894d"><div class="ttname"><a href="QuEST__cpu_8c.html#abe74a5a9db8340e37b80fbc77338894d">statevec_swapQubitAmpsDistributed</a></div><div class="ttdeci">void statevec_swapQubitAmpsDistributed(Qureg qureg, int pairRank, int qb1, int qb2)</div><div class="ttdoc">qureg.pairStateVec contains the entire set of amplitudes of the paired node which includes the set of...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03539">QuEST_cpu.c:3539</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_a514ca44595676abf4bc2e10fc48ef970"><div class="ttname"><a href="QuEST__common_8c.html#a514ca44595676abf4bc2e10fc48ef970">densmatr_applyMultiQubitKrausSuperoperator</a></div><div class="ttdeci">void densmatr_applyMultiQubitKrausSuperoperator(Qureg qureg, int *targets, int numTargets, ComplexMatrixN superOp)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00589">QuEST_common.c:589</a></div></div>
<div class="ttc" id="astructComplex_html_a84f5439aad0ef495efdd3b4c1c02d27e"><div class="ttname"><a href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">Complex::imag</a></div><div class="ttdeci">qreal imag</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00106">QuEST.h:106</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_ab1ec7f241b68b079c8e316d190af49ce"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#ab1ec7f241b68b079c8e316d190af49ce">getChunkOuterBlockPairIdForPart3</a></div><div class="ttdeci">static int getChunkOuterBlockPairIdForPart3(int chunkIsUpperSmallerQubit, int chunkIsUpperBiggerQubit, int chunkId, long long int chunkSize, int smallerQubit, int biggerQubit, int numQubits)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00325">QuEST_cpu_distributed.c:325</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a3528cf8d741807987d8150d59ccb1ba3"><div class="ttname"><a href="QuEST__cpu_8c.html#a3528cf8d741807987d8150d59ccb1ba3">statevec_pauliYDistributed</a></div><div class="ttdeci">void statevec_pauliYDistributed(Qureg qureg, ComplexArray stateVecIn, ComplexArray stateVecOut, int updateUpper, const int conjFac)</div><div class="ttdoc">Rotate a single qubit by +-{{0,-i},{i,0}.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02704">QuEST_cpu.c:2704</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_aa3c2d644a2be7f0d3aa9f757527d306f"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#aa3c2d644a2be7f0d3aa9f757527d306f">chunkIsUpperInOuterBlock</a></div><div class="ttdeci">static int chunkIsUpperInOuterBlock(int chunkId, long long int chunkSize, int targetQubit, int numQubits)</div><div class="ttdoc">fix – do with masking instead</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00236">QuEST_cpu_distributed.c:236</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_a2c489375aad6fb71203553c60bff043b"><div class="ttname"><a href="QuEST__common_8c.html#a2c489375aad6fb71203553c60bff043b">statevec_controlledRotateAroundAxis</a></div><div class="ttdeci">void statevec_controlledRotateAroundAxis(Qureg qureg, const int controlQubit, const int targetQubit, qreal angle, Vector axis)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00326">QuEST_common.c:326</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a230eea38971f36de8f5437b1f47aaf3e"><div class="ttname"><a href="QuEST__cpu_8c.html#a230eea38971f36de8f5437b1f47aaf3e">statevec_controlledCompactUnitaryDistributed</a></div><div class="ttdeci">void statevec_controlledCompactUnitaryDistributed(Qureg qureg, const int controlQubit, Complex rot1, Complex rot2, ComplexArray stateVecUp, ComplexArray stateVecLo, ComplexArray stateVecOut)</div><div class="ttdoc">Rotate a single qubit in the state vector of probability amplitudes, given two complex numbers alpha ...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02285">QuEST_cpu.c:2285</a></div></div>
<div class="ttc" id="astructComplex_html"><div class="ttname"><a href="structComplex.html">Complex</a></div><div class="ttdoc">Represents one complex number.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00103">QuEST.h:103</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_a65b9087ca37c096caa5c6e8586b67946"><div class="ttname"><a href="QuEST__common_8c.html#a65b9087ca37c096caa5c6e8586b67946">statevec_rotateAroundAxis</a></div><div class="ttdeci">void statevec_rotateAroundAxis(Qureg qureg, const int rotQubit, qreal angle, Vector axis)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00310">QuEST_common.c:310</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_abea6570b95fdfa102511ccd1fcb30685"><div class="ttname"><a href="QuEST__cpu_8c.html#abea6570b95fdfa102511ccd1fcb30685">statevec_hadamardDistributed</a></div><div class="ttdeci">void statevec_hadamardDistributed(Qureg qureg, ComplexArray stateVecUp, ComplexArray stateVecLo, ComplexArray stateVecOut, int updateUpper)</div><div class="ttdoc">Rotate a single qubit by {{1,1},{1,-1}}/sqrt2.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02894">QuEST_cpu.c:2894</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a877d988a763a52989484afc0f8d6ddf0"><div class="ttname"><a href="QuEST__internal_8h.html#a877d988a763a52989484afc0f8d6ddf0">statevec_multiControlledTwoQubitUnitary</a></div><div class="ttdeci">void statevec_multiControlledTwoQubitUnitary(Qureg qureg, long long int ctrlMask, const int targetQubit1, const int targetQubit2, ComplexMatrix4 u)</div><div class="ttdoc">This calls swapQubitAmps only when it would involve a distributed communication; if the qubit chunks ...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l01385">QuEST_cpu_distributed.c:1385</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a9028deac63419d71d523f73229a7bd84"><div class="ttname"><a href="QuEST__cpu_8c.html#a9028deac63419d71d523f73229a7bd84">statevec_controlledPauliYLocal</a></div><div class="ttdeci">void statevec_controlledPauliYLocal(Qureg qureg, const int controlQubit, const int targetQubit, const int conjFac)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02740">QuEST_cpu.c:2740</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a28d2a35fde2952211f5898a76275d93d"><div class="ttname"><a href="QuEST__cpu_8c.html#a28d2a35fde2952211f5898a76275d93d">densmatr_mixDampingDistributed</a></div><div class="ttdeci">void densmatr_mixDampingDistributed(Qureg qureg, const int targetQubit, qreal damping)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00299">QuEST_cpu.c:299</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_a0552889d6f57d9e0ed8b209bf426482d"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#a0552889d6f57d9e0ed8b209bf426482d">chunkIsUpper</a></div><div class="ttdeci">static int chunkIsUpper(int chunkId, long long int chunkSize, int targetQubit)</div><div class="ttdoc">Returns whether a given chunk in position chunkId is in the upper or lower half of a block.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00227">QuEST_cpu_distributed.c:227</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_abc9a9ef4344c7faaaf28ac25c76649b9"><div class="ttname"><a href="QuEST__internal_8h.html#abc9a9ef4344c7faaaf28ac25c76649b9">statevec_getRealAmp</a></div><div class="ttdeci">qreal statevec_getRealAmp(Qureg qureg, long long int index)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00198">QuEST_cpu_distributed.c:198</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a6fbb3b693f25dde1e9e3dc87dc1984f7"><div class="ttname"><a href="QuEST__cpu_8c.html#a6fbb3b693f25dde1e9e3dc87dc1984f7">statevec_calcInnerProductLocal</a></div><div class="ttdeci">Complex statevec_calcInnerProductLocal(Qureg bra, Qureg ket)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l01070">QuEST_cpu.c:1070</a></div></div>
<div class="ttc" id="astructComplexMatrix2_html"><div class="ttname"><a href="structComplexMatrix2.html">ComplexMatrix2</a></div><div class="ttdoc">Represents a 2x2 matrix of complex numbers.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00114">QuEST.h:114</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a94ee4df9faba286ad7a5bc829ef5174d"><div class="ttname"><a href="QuEST__internal_8h.html#a94ee4df9faba286ad7a5bc829ef5174d">statevec_compactUnitary</a></div><div class="ttdeci">void statevec_compactUnitary(Qureg qureg, const int targetQubit, Complex alpha, Complex beta)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00846">QuEST_cpu_distributed.c:846</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ac5168399122f7f53977dcc9ceda4f458"><div class="ttname"><a href="QuEST__cpu_8c.html#ac5168399122f7f53977dcc9ceda4f458">zeroSomeAmps</a></div><div class="ttdeci">void zeroSomeAmps(Qureg qureg, long long int startInd, long long int numAmps)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00733">QuEST_cpu.c:733</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a4b578690aa76d1e9cac9dc964d713f38"><div class="ttname"><a href="QuEST__cpu_8c.html#a4b578690aa76d1e9cac9dc964d713f38">densmatr_oneQubitDegradeOffDiagonal</a></div><div class="ttdeci">void densmatr_oneQubitDegradeOffDiagonal(Qureg qureg, const int targetQubit, qreal retain)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00048">QuEST_cpu.c:48</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a7772f97cb4d92a9825bf3b7c82c3230c"><div class="ttname"><a href="QuEST__cpu_8c.html#a7772f97cb4d92a9825bf3b7c82c3230c">densmatr_calcFidelityLocal</a></div><div class="ttdeci">qreal densmatr_calcFidelityLocal(Qureg qureg, Qureg pureState)</div><div class="ttdoc">computes a few dens-columns-worth of (vec^*T) dens * vec</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00989">QuEST_cpu.c:989</a></div></div>
<!-- HTML footer for doxygen 1.8.8-->
<!-- start footer part -->
</div>
</div>
</div>
</div>
</div>
</body>
<script type="text/javascript" src="boot.js"></script>
</html>