<!-- 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.4.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_e145b6391efe0b6e575fd5bb5f76dbf8.html">QuEST</a></li><li class="navelem"><a class="el" href="dir_aaf4e0c86438000dc030ca371e863336.html">QuEST</a></li><li class="navelem"><a class="el" href="dir_288db1ec25fc0ec29a6dc915511dd336.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:a2b78ab7dd04eab615a0d7c796e73ae8c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a2b78ab7dd04eab615a0d7c796e73ae8c">agnostic_applyQFT</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int *qubits, int numQubits)</td></tr>
<tr class="separator:a2b78ab7dd04eab615a0d7c796e73ae8c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a8a8e789585651f90fcc587042d4cdfb8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a8a8e789585651f90fcc587042d4cdfb8">agnostic_applyTrotterCircuit</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, <a class="el" href="structPauliHamil.html">PauliHamil</a> hamil, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> time, int order, int reps)</td></tr>
<tr class="separator:a8a8e789585651f90fcc587042d4cdfb8"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a0b84e6766bd682708e6211276ff0a5bb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDiagonalOp.html">DiagonalOp</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a0b84e6766bd682708e6211276ff0a5bb">agnostic_createDiagonalOp</a> (int numQubits, <a class="el" href="structQuESTEnv.html">QuESTEnv</a> env)</td></tr>
<tr class="separator:a0b84e6766bd682708e6211276ff0a5bb"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af798bb01f922804016c4c5bc8d0a580f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#af798bb01f922804016c4c5bc8d0a580f">agnostic_destroyDiagonalOp</a> (<a class="el" href="structDiagonalOp.html">DiagonalOp</a> op)</td></tr>
<tr class="separator:af798bb01f922804016c4c5bc8d0a580f"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a81a87bb0f0805c9dfcb691f6cb15a1b5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a81a87bb0f0805c9dfcb691f6cb15a1b5">agnostic_initDiagonalOpFromPauliHamil</a> (<a class="el" href="structDiagonalOp.html">DiagonalOp</a> op, <a class="el" href="structPauliHamil.html">PauliHamil</a> hamil)</td></tr>
<tr class="separator:a81a87bb0f0805c9dfcb691f6cb15a1b5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab58d6d599c7a729255b1f8eeded663f3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ab58d6d599c7a729255b1f8eeded663f3">agnostic_setDiagonalOpElems</a> (<a class="el" href="structDiagonalOp.html">DiagonalOp</a> op, long long int startInd, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *real, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *imag, long long int numElems)</td></tr>
<tr class="separator:ab58d6d599c7a729255b1f8eeded663f3"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a1e8f917ab42d38d8c37ba6816b24f2f5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a1e8f917ab42d38d8c37ba6816b24f2f5">agnostic_syncDiagonalOp</a> (<a class="el" href="structDiagonalOp.html">DiagonalOp</a> op)</td></tr>
<tr class="separator:a1e8f917ab42d38d8c37ba6816b24f2f5"><td class="memSeparator" colspan="2"> </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:aedd7ecccf2f09dd2f1c5d191950b51e6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aedd7ecccf2f09dd2f1c5d191950b51e6">densmatr_applyDiagonalOp</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, <a class="el" href="structDiagonalOp.html">DiagonalOp</a> op)</td></tr>
<tr class="separator:aedd7ecccf2f09dd2f1c5d191950b51e6"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a70e3b0a2297c186d5c779af31459b4ca"><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#a70e3b0a2297c186d5c779af31459b4ca">densmatr_calcExpecDiagonalOp</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, <a class="el" href="structDiagonalOp.html">DiagonalOp</a> op)</td></tr>
<tr class="separator:a70e3b0a2297c186d5c779af31459b4ca"><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:a2c664d8abca0a6f87c2bf4fe75fbff90"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a2c664d8abca0a6f87c2bf4fe75fbff90">densmatr_calcProbOfAllOutcomes</a> (<a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *retProbs, <a class="el" href="structQureg.html">Qureg</a> qureg, int *qubits, int numQubits)</td></tr>
<tr class="separator:a2c664d8abca0a6f87c2bf4fe75fbff90"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ae37b3eff5d3affbc1edfe216cabc1c53"><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#ae37b3eff5d3affbc1edfe216cabc1c53">densmatr_calcProbOfOutcome</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int measureQubit, int outcome)</td></tr>
<tr class="separator:ae37b3eff5d3affbc1edfe216cabc1c53"><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:a5658f2ecbbd4ea425db5f7dc7fc4ba92"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a5658f2ecbbd4ea425db5f7dc7fc4ba92">densmatr_collapseToKnownProbOutcome</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int measureQubit, int outcome, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> outcomeProb)</td></tr>
<tr class="memdesc:a5658f2ecbbd4ea425db5f7dc7fc4ba92"><td class="mdescLeft"> </td><td class="mdescRight">Renorms (/prob) every | * outcome * >< * outcome * | state, setting all others to zero. <a href="QuEST__internal_8h.html#a5658f2ecbbd4ea425db5f7dc7fc4ba92">More...</a><br /></td></tr>
<tr class="separator:a5658f2ecbbd4ea425db5f7dc7fc4ba92"><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:ac501fe7b9d331be48359ce1546348f97"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ac501fe7b9d331be48359ce1546348f97">densmatr_mixDamping</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> damping)</td></tr>
<tr class="separator:ac501fe7b9d331be48359ce1546348f97"><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:aa31f0ef43a921c3ac73545d1d3670fa1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aa31f0ef43a921c3ac73545d1d3670fa1">densmatr_mixDephasing</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> dephase)</td></tr>
<tr class="separator:aa31f0ef43a921c3ac73545d1d3670fa1"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a398b60c4cb4fa2cf2ffc126de6c08da0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a398b60c4cb4fa2cf2ffc126de6c08da0">densmatr_mixDepolarising</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> depolLevel)</td></tr>
<tr class="separator:a398b60c4cb4fa2cf2ffc126de6c08da0"><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:a623e577b7230f3c8dc202be6185b4289"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a623e577b7230f3c8dc202be6185b4289">densmatr_mixTwoQubitDephasing</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int qubit1, int qubit2, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> dephase)</td></tr>
<tr class="separator:a623e577b7230f3c8dc202be6185b4289"><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:a6fa6f1bc617e9fef3cd87ecc3677a02b"><td class="memItemLeft" align="right" valign="top">long long int </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a6fa6f1bc617e9fef3cd87ecc3677a02b">getControlFlipMask</a> (int *controlQubits, int *controlState, int numControlQubits)</td></tr>
<tr class="separator:a6fa6f1bc617e9fef3cd87ecc3677a02b"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a0182eedcff44469771c971d8e2d73dc5"><td class="memItemLeft" align="right" valign="top">long long int </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a0182eedcff44469771c971d8e2d73dc5">getQubitBitMask</a> (int *controlQubits, int numControlQubits)</td></tr>
<tr class="separator:a0182eedcff44469771c971d8e2d73dc5"><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:aecc3c36b275c53b321de1611c2f06f78"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aecc3c36b275c53b321de1611c2f06f78">shiftSubregIndices</a> (int *allInds, int *numIndsPerReg, int numRegs, int shift)</td></tr>
<tr class="separator:aecc3c36b275c53b321de1611c2f06f78"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a27294e3065ebe42a65b3b9e0f85551dd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a27294e3065ebe42a65b3b9e0f85551dd">statevec_applyDiagonalOp</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, <a class="el" href="structDiagonalOp.html">DiagonalOp</a> op)</td></tr>
<tr class="separator:a27294e3065ebe42a65b3b9e0f85551dd"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab33437d10c1ce1c4b034c7c411db553f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ab33437d10c1ce1c4b034c7c411db553f">statevec_applyMultiVarPhaseFuncOverrides</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int *qubits, int *numQubitsPerReg, int numRegs, enum <a class="el" href="group__type.html#ga9c91c41aa42ae537995e89ffc616afe1">bitEncoding</a> encoding, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *coeffs, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *exponents, int *numTermsPerReg, long long int *overrideInds, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *overridePhases, int numOverrides, int conj)</td></tr>
<tr class="separator:ab33437d10c1ce1c4b034c7c411db553f"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a7d8a817207847d2646a52044a63fd469"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a7d8a817207847d2646a52044a63fd469">statevec_applyParamNamedPhaseFuncOverrides</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int *qubits, int *numQubitsPerReg, int numRegs, enum <a class="el" href="group__type.html#ga9c91c41aa42ae537995e89ffc616afe1">bitEncoding</a> encoding, enum <a class="el" href="group__type.html#gaa7d869b117ba5024d6b84938e8cdfc65">phaseFunc</a> functionNameCode, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *params, int numParams, long long int *overrideInds, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *overridePhases, int numOverrides, int conj)</td></tr>
<tr class="separator:a7d8a817207847d2646a52044a63fd469"><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:a9d7928473aca695a614e9c24d903e578"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a9d7928473aca695a614e9c24d903e578">statevec_applyPhaseFuncOverrides</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int *qubits, int numQubits, enum <a class="el" href="group__type.html#ga9c91c41aa42ae537995e89ffc616afe1">bitEncoding</a> encoding, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *coeffs, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *exponents, int numTerms, long long int *overrideInds, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *overridePhases, int numOverrides, int conj)</td></tr>
<tr class="separator:a9d7928473aca695a614e9c24d903e578"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a0fb948ddab4ca210e523aa3c52639df4"><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#a0fb948ddab4ca210e523aa3c52639df4">statevec_calcExpecDiagonalOp</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, <a class="el" href="structDiagonalOp.html">DiagonalOp</a> op)</td></tr>
<tr class="separator:a0fb948ddab4ca210e523aa3c52639df4"><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:a78cf98ea535790bc46069b60bae342c7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a78cf98ea535790bc46069b60bae342c7">statevec_calcProbOfAllOutcomes</a> (<a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *retProbs, <a class="el" href="structQureg.html">Qureg</a> qureg, int *qubits, int numQubits)</td></tr>
<tr class="separator:a78cf98ea535790bc46069b60bae342c7"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a63cb88a5f4eb12fef087435b8db3f8eb"><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#a63cb88a5f4eb12fef087435b8db3f8eb">statevec_calcProbOfOutcome</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int measureQubit, int outcome)</td></tr>
<tr class="separator:a63cb88a5f4eb12fef087435b8db3f8eb"><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:a008becc4a18f868340836e0ab9fd6df6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a008becc4a18f868340836e0ab9fd6df6">statevec_collapseToKnownProbOutcome</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int measureQubit, int outcome, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> outcomeProb)</td></tr>
<tr class="separator:a008becc4a18f868340836e0ab9fd6df6"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aec63559e8b9ab0e17efe18d64d2ceca6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aec63559e8b9ab0e17efe18d64d2ceca6">statevec_compactUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, 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:aec63559e8b9ab0e17efe18d64d2ceca6"><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:a1275d604674224d87a173fb5bac78835"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a1275d604674224d87a173fb5bac78835">statevec_controlledCompactUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int controlQubit, 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:a1275d604674224d87a173fb5bac78835"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a06b8474aec51579ff680fb66439e7fc6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a06b8474aec51579ff680fb66439e7fc6">statevec_controlledMultiQubitUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int ctrl, int *targets, int numTargets, <a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> u)</td></tr>
<tr class="separator:a06b8474aec51579ff680fb66439e7fc6"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:abb2eab4af99adcc59be24f4c91c6f6ad"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#abb2eab4af99adcc59be24f4c91c6f6ad">statevec_controlledNot</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int controlQubit, int targetQubit)</td></tr>
<tr class="separator:abb2eab4af99adcc59be24f4c91c6f6ad"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a4e19ef93d01d7acea32ca646d623aedd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a4e19ef93d01d7acea32ca646d623aedd">statevec_controlledPauliY</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int controlQubit, int targetQubit)</td></tr>
<tr class="separator:a4e19ef93d01d7acea32ca646d623aedd"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a4a2fa262d3f0dba372797b9bd35d9fa5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a4a2fa262d3f0dba372797b9bd35d9fa5">statevec_controlledPauliYConj</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int controlQubit, int targetQubit)</td></tr>
<tr class="separator:a4a2fa262d3f0dba372797b9bd35d9fa5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aaf78491e35d165edfd57387f9fffecbd"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aaf78491e35d165edfd57387f9fffecbd">statevec_controlledPhaseFlip</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int idQubit1, int idQubit2)</td></tr>
<tr class="separator:aaf78491e35d165edfd57387f9fffecbd"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a63df1ec14ff7cc81c3f392ac10fcc744"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a63df1ec14ff7cc81c3f392ac10fcc744">statevec_controlledPhaseShift</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int idQubit1, int idQubit2, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:a63df1ec14ff7cc81c3f392ac10fcc744"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a336c3286d2434fc892ebe20e9fa22a24"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a336c3286d2434fc892ebe20e9fa22a24">statevec_controlledRotateAroundAxis</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int controlQubit, 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:a336c3286d2434fc892ebe20e9fa22a24"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a5ea2384a9b33c94eac891aacbfa5da6a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a5ea2384a9b33c94eac891aacbfa5da6a">statevec_controlledRotateAroundAxisConj</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int controlQubit, 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:a5ea2384a9b33c94eac891aacbfa5da6a"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aa32eed5bc38e85193e1aa23b74e8541b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#aa32eed5bc38e85193e1aa23b74e8541b">statevec_controlledRotateX</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int controlQubit, int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:aa32eed5bc38e85193e1aa23b74e8541b"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ade67874c89179541f616b3685595d3ae"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ade67874c89179541f616b3685595d3ae">statevec_controlledRotateY</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int controlQubit, int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:ade67874c89179541f616b3685595d3ae"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a3e11a9b9fa5ee16d4738a97f4590ee61"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a3e11a9b9fa5ee16d4738a97f4590ee61">statevec_controlledRotateZ</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int controlQubit, int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:a3e11a9b9fa5ee16d4738a97f4590ee61"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ad7ac4934371d72e24c6d1cea3d3da391"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ad7ac4934371d72e24c6d1cea3d3da391">statevec_controlledTwoQubitUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int controlQubit, int targetQubit1, int targetQubit2, <a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> u)</td></tr>
<tr class="separator:ad7ac4934371d72e24c6d1cea3d3da391"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:add9ca9956cdd81ed5d0b0f66168c04a3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#add9ca9956cdd81ed5d0b0f66168c04a3">statevec_controlledUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int controlQubit, int targetQubit, <a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> u)</td></tr>
<tr class="separator:add9ca9956cdd81ed5d0b0f66168c04a3"><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:af3fc7bd149c70f083b149050242cd55e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#af3fc7bd149c70f083b149050242cd55e">statevec_hadamard</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit)</td></tr>
<tr class="separator:af3fc7bd149c70f083b149050242cd55e"><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:a13ecc24b355a5213d745651cde56bd71"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a13ecc24b355a5213d745651cde56bd71">statevec_multiControlledMultiQubitNot</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int ctrlMask, int targMask)</td></tr>
<tr class="separator:a13ecc24b355a5213d745651cde56bd71"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a0acfe30083d0bc2a84da196378a36122"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a0acfe30083d0bc2a84da196378a36122">statevec_multiControlledMultiQubitUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int ctrlMask, int *targs, int numTargs, <a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> u)</td></tr>
<tr class="memdesc:a0acfe30083d0bc2a84da196378a36122"><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#a0acfe30083d0bc2a84da196378a36122">More...</a><br /></td></tr>
<tr class="separator:a0acfe30083d0bc2a84da196378a36122"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a08d2e22870f3ef0289e355d634ea17a2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a08d2e22870f3ef0289e355d634ea17a2">statevec_multiControlledMultiRotatePauli</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int ctrlMask, 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="separator:a08d2e22870f3ef0289e355d634ea17a2"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a3ed30f823a59890be17441d97ce90c5c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a3ed30f823a59890be17441d97ce90c5c">statevec_multiControlledMultiRotateZ</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int ctrlMask, long long int targMask, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:a3ed30f823a59890be17441d97ce90c5c"><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:a3eadcb581f2623e21e4967f791d0439c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a3eadcb581f2623e21e4967f791d0439c">statevec_multiControlledTwoQubitUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int ctrlMask, int targetQubit1, int targetQubit2, <a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> u)</td></tr>
<tr class="memdesc:a3eadcb581f2623e21e4967f791d0439c"><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#a3eadcb581f2623e21e4967f791d0439c">More...</a><br /></td></tr>
<tr class="separator:a3eadcb581f2623e21e4967f791d0439c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a600bda10463e2078ce746ec28f2d39c9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a600bda10463e2078ce746ec28f2d39c9">statevec_multiControlledUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, long long int ctrlQubitsMask, long long int ctrlFlipMask, int targetQubit, <a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> u)</td></tr>
<tr class="separator:a600bda10463e2078ce746ec28f2d39c9"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a7a76950824f17e821415070a4bfdad5b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a7a76950824f17e821415070a4bfdad5b">statevec_multiQubitUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int *targets, int numTargets, <a class="el" href="structComplexMatrixN.html">ComplexMatrixN</a> u)</td></tr>
<tr class="separator:a7a76950824f17e821415070a4bfdad5b"><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:a1c82b5e914a8a39c5c7b782dbc16fa76"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a1c82b5e914a8a39c5c7b782dbc16fa76">statevec_pauliX</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit)</td></tr>
<tr class="separator:a1c82b5e914a8a39c5c7b782dbc16fa76"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:af1cca787f3b0e0c91ffb2495f9ad8d5a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#af1cca787f3b0e0c91ffb2495f9ad8d5a">statevec_pauliY</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit)</td></tr>
<tr class="separator:af1cca787f3b0e0c91ffb2495f9ad8d5a"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a81fbd2eccd0d0e5a3cece4df2f96cb92"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a81fbd2eccd0d0e5a3cece4df2f96cb92">statevec_pauliYConj</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit)</td></tr>
<tr class="separator:a81fbd2eccd0d0e5a3cece4df2f96cb92"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab14df201e5c05527dc77cfeb6f583042"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ab14df201e5c05527dc77cfeb6f583042">statevec_pauliZ</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit)</td></tr>
<tr class="separator:ab14df201e5c05527dc77cfeb6f583042"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a5ef139196852f92fe8271c82964eadff"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a5ef139196852f92fe8271c82964eadff">statevec_phaseShift</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:a5ef139196852f92fe8271c82964eadff"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a535cc3c9962d511078691e4d64b4e272"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a535cc3c9962d511078691e4d64b4e272">statevec_phaseShiftByTerm</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit, <a class="el" href="structComplex.html">Complex</a> term)</td></tr>
<tr class="separator:a535cc3c9962d511078691e4d64b4e272"><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:adf5fbea75826cde7d86fd7c31bcf3dec"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#adf5fbea75826cde7d86fd7c31bcf3dec">statevec_rotateAroundAxis</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, 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:adf5fbea75826cde7d86fd7c31bcf3dec"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a2cbfe9f416d4d8acb56213841f62cb53"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a2cbfe9f416d4d8acb56213841f62cb53">statevec_rotateAroundAxisConj</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, 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:a2cbfe9f416d4d8acb56213841f62cb53"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ab8687e6ea5cf35503c223051837f3b94"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ab8687e6ea5cf35503c223051837f3b94">statevec_rotateX</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int rotQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:ab8687e6ea5cf35503c223051837f3b94"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a1f0db2800d13b6c2b120e05129cd13cb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a1f0db2800d13b6c2b120e05129cd13cb">statevec_rotateY</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int rotQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:a1f0db2800d13b6c2b120e05129cd13cb"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a2b2b8c69566a49cdf4a3fa2cb4f5e03c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a2b2b8c69566a49cdf4a3fa2cb4f5e03c">statevec_rotateZ</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int rotQubit, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> angle)</td></tr>
<tr class="separator:a2b2b8c69566a49cdf4a3fa2cb4f5e03c"><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:a559d175d31cec552fc09aec3e8a78d11"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a559d175d31cec552fc09aec3e8a78d11">statevec_sGate</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit)</td></tr>
<tr class="separator:a559d175d31cec552fc09aec3e8a78d11"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a142b424d903dfaca7a7ac166076f543a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a142b424d903dfaca7a7ac166076f543a">statevec_sGateConj</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit)</td></tr>
<tr class="separator:a142b424d903dfaca7a7ac166076f543a"><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:a2d96b4601cc3a9e1221e11a366fe1699"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a2d96b4601cc3a9e1221e11a366fe1699">statevec_tGate</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit)</td></tr>
<tr class="separator:a2d96b4601cc3a9e1221e11a366fe1699"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a086fffa88b1aeec1405aa2dc41eab8a3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a086fffa88b1aeec1405aa2dc41eab8a3">statevec_tGateConj</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit)</td></tr>
<tr class="separator:a086fffa88b1aeec1405aa2dc41eab8a3"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a95abbe0cedf45b1ff2f070dba219fd7f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#a95abbe0cedf45b1ff2f070dba219fd7f">statevec_twoQubitUnitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit1, int targetQubit2, <a class="el" href="structComplexMatrix4.html">ComplexMatrix4</a> u)</td></tr>
<tr class="separator:a95abbe0cedf45b1ff2f070dba219fd7f"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ac3735bd959600e57b2ee3a105666cddf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="QuEST__internal_8h.html#ac3735bd959600e57b2ee3a105666cddf">statevec_unitary</a> (<a class="el" href="structQureg.html">Qureg</a> qureg, int targetQubit, <a class="el" href="structComplexMatrix2.html">ComplexMatrix2</a> u)</td></tr>
<tr class="separator:ac3735bd959600e57b2ee3a105666cddf"><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="a2b78ab7dd04eab615a0d7c796e73ae8c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2b78ab7dd04eab615a0d7c796e73ae8c">◆ </a></span>agnostic_applyQFT()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void agnostic_applyQFT </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>qubits</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></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#l00849">849</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="l00849"></a><span class="lineno"> 849</span>  {</div>
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  </div>
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <span class="keywordtype">int</span> densShift = qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>;</div>
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  </div>
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="comment">// start with top/left-most qubit, work down</span></div>
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> q=numQubits-1; q >= 0; q--) {</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="comment">// H</span></div>
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <a class="code" href="QuEST__internal_8h.html#af3fc7bd149c70f083b149050242cd55e">statevec_hadamard</a>(qureg, qubits[q]);</div>
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#acf78445e9435d09f44f0cc832c6aee79">isDensityMatrix</a>)</div>
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <a class="code" href="QuEST__internal_8h.html#af3fc7bd149c70f083b149050242cd55e">statevec_hadamard</a>(qureg, qubits[q] + densShift);</div>
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <a class="code" href="QuEST__qasm_8c.html#a81749d23b8c3c1acf87c9db675872c24">qasm_recordGate</a>(qureg, <a class="code" href="QuEST__qasm_8h.html#a32bbd0276b80668812ac248cd81c725fa8417e56d80add49216437e0d451e8dd9">GATE_HADAMARD</a>, qubits[q]);</div>
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  </div>
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <span class="keywordflow">if</span> (q == 0)</div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  </div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="comment">// succession of C-phases, control on qubits[q], targeting each of </span></div>
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <span class="comment">// qubits[q-1], qubits[q-1], ... qubits[0]. This can be expressed by </span></div>
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="comment">// a single invocation of applyNamedPhaseFunc product</span></div>
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  </div>
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="keywordtype">int</span> numRegs = 2;</div>
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordtype">int</span> numQubitsPerReg[2] = {q, 1};</div>
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <span class="keywordtype">int</span> regs[100]; <span class="comment">// [q+1];</span></div>
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i<q+1; i++)</div>
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  regs[i] = qubits[i]; <span class="comment">// qubits[q] is in own register</span></div>
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  </div>
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  <span class="keywordtype">int</span> numParams = 1;</div>
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> params[1] = { <a class="code" href="QuEST__common_8c.html#ae71449b1cc6e6250b91f539153a7a0d3">M_PI</a> / (1 << q) };</div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  </div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  <span class="keywordtype">int</span> conj = 0;</div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  <a class="code" href="QuEST__internal_8h.html#a7d8a817207847d2646a52044a63fd469">statevec_applyParamNamedPhaseFuncOverrides</a>(</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  qureg, regs, numQubitsPerReg, numRegs, </div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <a class="code" href="group__type.html#gga9c91c41aa42ae537995e89ffc616afe1a7165f9a47792f47c718ca128556fb3ae">UNSIGNED</a>, <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a31a29a30f92fe34c35098f941adbbc93">SCALED_PRODUCT</a>, params, numParams, </div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  NULL, NULL, 0, </div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  conj);</div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#acf78445e9435d09f44f0cc832c6aee79">isDensityMatrix</a>) {</div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  conj = 1;</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <a class="code" href="QuEST__common_8c.html#aecc3c36b275c53b321de1611c2f06f78">shiftSubregIndices</a>(regs, numQubitsPerReg, numRegs, densShift);</div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <a class="code" href="QuEST__internal_8h.html#a7d8a817207847d2646a52044a63fd469">statevec_applyParamNamedPhaseFuncOverrides</a>(</div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  qureg, regs, numQubitsPerReg, numRegs, </div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <a class="code" href="group__type.html#gga9c91c41aa42ae537995e89ffc616afe1a7165f9a47792f47c718ca128556fb3ae">UNSIGNED</a>, <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a31a29a30f92fe34c35098f941adbbc93">SCALED_PRODUCT</a>, params, numParams, </div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  NULL, NULL, 0, </div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  conj);</div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <a class="code" href="QuEST__common_8c.html#aecc3c36b275c53b321de1611c2f06f78">shiftSubregIndices</a>(regs, numQubitsPerReg, numRegs, - densShift);</div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  }</div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  <a class="code" href="QuEST__qasm_8c.html#ab60a4a8af0530cbfa8cba1b02692d448">qasm_recordNamedPhaseFunc</a>(</div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  qureg, regs, numQubitsPerReg, numRegs, </div>
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  <a class="code" href="group__type.html#gga9c91c41aa42ae537995e89ffc616afe1a7165f9a47792f47c718ca128556fb3ae">UNSIGNED</a>, <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a31a29a30f92fe34c35098f941adbbc93">SCALED_PRODUCT</a>, params, numParams, </div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  NULL, NULL, 0);</div>
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  }</div>
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  </div>
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="comment">// final swaps</span></div>
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i<(numQubits/2); i++) {</div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  </div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <span class="keywordtype">int</span> qb1 = qubits[i];</div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <span class="keywordtype">int</span> qb2 = qubits[numQubits-i-1];</div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  </div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <a class="code" href="QuEST__internal_8h.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, qb1, qb2);</div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#acf78445e9435d09f44f0cc832c6aee79">isDensityMatrix</a>)</div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <a class="code" href="QuEST__internal_8h.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, qb1 + densShift, qb2 + densShift);</div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <a class="code" href="QuEST__qasm_8c.html#aa4c380db9eda18892d5a86825fa4b165">qasm_recordControlledGate</a>(qureg, <a class="code" href="QuEST__qasm_8h.html#a32bbd0276b80668812ac248cd81c725fab12d052de2b7c59c6ab87710fd7d3c78">GATE_SWAP</a>, qb1, qb2);</div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  }</div>
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__qasm_8h_source.html#l00026">GATE_HADAMARD</a>, <a class="el" href="QuEST__qasm_8h_source.html#l00033">GATE_SWAP</a>, <a class="el" href="QuEST_8h_source.html#l00325">Qureg::isDensityMatrix</a>, <a class="el" href="QuEST__common_8c_source.html#l00041">M_PI</a>, <a class="el" href="QuEST_8h_source.html#l00327">Qureg::numQubitsRepresented</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00239">qasm_recordControlledGate()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00179">qasm_recordGate()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00726">qasm_recordNamedPhaseFunc()</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00233">SCALED_PRODUCT</a>, <a class="el" href="QuEST__common_8c_source.html#l00161">shiftSubregIndices()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l04446">statevec_applyParamNamedPhaseFuncOverrides()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01258">statevec_hadamard()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01431">statevec_swapQubitAmps()</a>, and <a class="el" href="QuEST_8h_source.html#l00269">UNSIGNED</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00876">applyFullQFT()</a>, and <a class="el" href="QuEST_8c_source.html#l00866">applyQFT()</a>.</p>
</div>
</div>
<a id="a8a8e789585651f90fcc587042d4cdfb8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8a8e789585651f90fcc587042d4cdfb8">◆ </a></span>agnostic_applyTrotterCircuit()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void agnostic_applyTrotterCircuit </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="structPauliHamil.html">PauliHamil</a> </td>
<td class="paramname"><em>hamil</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>time</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>order</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>reps</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#l00840">840</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="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>  <span class="keywordflow">if</span> (time == 0)</div>
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">return</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">for</span> (<span class="keywordtype">int</span> r=0; r<reps; r++)</div>
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <a class="code" href="QuEST__common_8c.html#a4f419c557e4505da481879407a920541">applySymmetrizedTrotterCircuit</a>(qureg, hamil, time/reps, order);</div>
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00820">applySymmetrizedTrotterCircuit()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01070">applyTrotterCircuit()</a>.</p>
</div>
</div>
<a id="a0b84e6766bd682708e6211276ff0a5bb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0b84e6766bd682708e6211276ff0a5bb">◆ </a></span>agnostic_createDiagonalOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structDiagonalOp.html">DiagonalOp</a> agnostic_createDiagonalOp </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#l01346">1346</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="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="comment">// the 2^numQubits values will be evenly split between the env.numRanks nodes</span></div>
<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>  <a class="code" href="structDiagonalOp.html">DiagonalOp</a> op;</div>
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  op.<a class="code" href="structDiagonalOp.html#a5131eeb67aafb4c19ac98270c3266742">numQubits</a> = numQubits;</div>
<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  op.<a class="code" href="structDiagonalOp.html#a2c6eab631ef48b4978db026c98180eee">numElemsPerChunk</a> = (1LL << numQubits) / env.<a class="code" href="structQuESTEnv.html#af22aacd7c9905accae28484785c193b4">numRanks</a>;</div>
<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  op.<a class="code" href="structDiagonalOp.html#aa91713a22c95a383bba55e56c4a4e37a">chunkId</a> = env.<a class="code" href="structQuESTEnv.html#aa648bb336cf8598467cb62db00b9cee8">rank</a>;</div>
<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  op.<a class="code" href="structDiagonalOp.html#ada3bffa8e414f883e415dd74e46cd879">numChunks</a> = env.<a class="code" href="structQuESTEnv.html#af22aacd7c9905accae28484785c193b4">numRanks</a>;</div>
<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>  </div>
<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>  <span class="comment">// allocate CPU memory (initialised to zero)</span></div>
<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  op.<a class="code" href="structDiagonalOp.html#a1d66088bed235d524cd452b107694d5c">real</a> = (<a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>*) calloc(op.<a class="code" href="structDiagonalOp.html#a2c6eab631ef48b4978db026c98180eee">numElemsPerChunk</a>, <span class="keyword">sizeof</span>(<a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>));</div>
<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>  op.<a class="code" href="structDiagonalOp.html#a85c3f52533efe831bbe40b9a48602388">imag</a> = (<a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>*) calloc(op.<a class="code" href="structDiagonalOp.html#a2c6eab631ef48b4978db026c98180eee">numElemsPerChunk</a>, <span class="keyword">sizeof</span>(<a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>));</div>
<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>  <span class="comment">// check cpu memory allocation was successful</span></div>
<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>  <span class="keywordflow">if</span> ( !op.<a class="code" href="structDiagonalOp.html#a1d66088bed235d524cd452b107694d5c">real</a> || !op.<a class="code" href="structDiagonalOp.html#a85c3f52533efe831bbe40b9a48602388">imag</a> ) {</div>
<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>  printf(<span class="stringliteral">"Could not allocate memory!\n"</span>);</div>
<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  exit(EXIT_FAILURE);</div>
<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  }</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="keywordflow">return</span> op;</div>
<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00306">DiagonalOp::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00312">DiagonalOp::deviceOperator</a>, <a class="el" href="QuEST_8h_source.html#l00310">DiagonalOp::imag</a>, <a class="el" href="QuEST_8h_source.html#l00304">DiagonalOp::numChunks</a>, <a class="el" href="QuEST_8h_source.html#l00302">DiagonalOp::numElemsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00300">DiagonalOp::numQubits</a>, <a class="el" href="QuEST_8h_source.html#l00365">QuESTEnv::numRanks</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00364">QuESTEnv::rank</a>, and <a class="el" href="QuEST_8h_source.html#l00308">DiagonalOp::real</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01518">createDiagonalOp()</a>, and <a class="el" href="QuEST_8c_source.html#l01558">createDiagonalOpFromPauliHamilFile()</a>.</p>
</div>
</div>
<a id="af798bb01f922804016c4c5bc8d0a580f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af798bb01f922804016c4c5bc8d0a580f">◆ </a></span>agnostic_destroyDiagonalOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void agnostic_destroyDiagonalOp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structDiagonalOp.html">DiagonalOp</a> </td>
<td class="paramname"><em>op</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#l01368">1368</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="l01368"></a><span class="lineno"> 1368</span>  {</div>
<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>  free(op.<a class="code" href="structDiagonalOp.html#a1d66088bed235d524cd452b107694d5c">real</a>);</div>
<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>  free(op.<a class="code" href="structDiagonalOp.html#a85c3f52533efe831bbe40b9a48602388">imag</a>);</div>
<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00312">DiagonalOp::deviceOperator</a>, <a class="el" href="QuEST_8h_source.html#l00310">DiagonalOp::imag</a>, and <a class="el" href="QuEST_8h_source.html#l00308">DiagonalOp::real</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01524">destroyDiagonalOp()</a>.</p>
</div>
</div>
<a id="a81a87bb0f0805c9dfcb691f6cb15a1b5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a81a87bb0f0805c9dfcb691f6cb15a1b5">◆ </a></span>agnostic_initDiagonalOpFromPauliHamil()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void agnostic_initDiagonalOpFromPauliHamil </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structDiagonalOp.html">DiagonalOp</a> </td>
<td class="paramname"><em>op</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structPauliHamil.html">PauliHamil</a> </td>
<td class="paramname"><em>hamil</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#l01377">1377</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="l01377"></a><span class="lineno"> 1377</span>  {</div>
<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>  </div>
<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>  <span class="comment">/* each node modifies its op sub-partition, evaluating the full hamil </span></div>
<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="comment"> * for every element in the sub-partition </span></div>
<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="comment"> */</span></div>
<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>  </div>
<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>  <span class="comment">// unpack op</span></div>
<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> offset = op.<a class="code" href="structDiagonalOp.html#aa91713a22c95a383bba55e56c4a4e37a">chunkId</a> * op.<a class="code" href="structDiagonalOp.html#a2c6eab631ef48b4978db026c98180eee">numElemsPerChunk</a>;</div>
<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> numElems = op.<a class="code" href="structDiagonalOp.html#a2c6eab631ef48b4978db026c98180eee">numElemsPerChunk</a>;</div>
<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* opRe = op.<a class="code" href="structDiagonalOp.html#a1d66088bed235d524cd452b107694d5c">real</a>;</div>
<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* opIm = op.<a class="code" href="structDiagonalOp.html#a85c3f52533efe831bbe40b9a48602388">imag</a>;</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="comment">// unpack hamil</span></div>
<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>  <span class="keywordtype">int</span> numTerms = hamil.<a class="code" href="structPauliHamil.html#a737e46b40ef8990cf004d22eb9dbe2e4">numSumTerms</a>;</div>
<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>  <span class="keywordtype">int</span> numQubits = hamil.<a class="code" href="structPauliHamil.html#acb49fff0e3160ea1904c9ca34408b4e1">numQubits</a>;</div>
<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* coeffs = hamil.<a class="code" href="structPauliHamil.html#ac1c6c9f6299cf83bbba88123216c3cac">termCoeffs</a>;</div>
<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>  <span class="keyword">enum</span> <a class="code" href="group__type.html#ga1c703cf89629e4e9c7023cd402d67028">pauliOpType</a>* codes = hamil.<a class="code" href="structPauliHamil.html#a4b8d38c403553c07ceddcd40c46ce6c8">pauliCodes</a>;</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">// private OpenMP vars</span></div>
<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> i, globalInd;</div>
<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> elem;</div>
<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  <span class="keywordtype">int</span> t, q, isOddNumOnes, sign;</div>
<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>  </div>
<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> <span class="preprocessor"> shared (offset,numElems, opRe,opIm, numTerms,numQubits,coeffs,codes) \</span></div>
<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <span class="preprocessor"> private (i,globalInd, elem, isOddNumOnes,t,q,sign) </span></div>
<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>  {</div>
<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>  <span class="keywordflow">for</span> (i=0; i<numElems; i++) {</div>
<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>  </div>
<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>  globalInd = i + offset;</div>
<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>  elem = 0;</div>
<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>  </div>
<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>  <span class="comment">// add every Hamiltonian coefficient to this element, either + or -</span></div>
<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>  <span class="keywordflow">for</span> (t=0; t<numTerms; t++) {</div>
<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>  </div>
<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>  <span class="comment">// determine parity of ones (in globalInd basis state) of the current term's targets</span></div>
<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>  isOddNumOnes = 0;</div>
<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>  <span class="keywordflow">for</span> (q=0; q<numQubits; q++)</div>
<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>  <span class="keywordflow">if</span> (codes[q + t*numQubits] == <a class="code" href="group__type.html#gga1c703cf89629e4e9c7023cd402d67028a085c85cff6ba79c52d8b1e61c42ddddf">PAULI_Z</a>)</div>
<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a>(q, globalInd))</div>
<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>  isOddNumOnes = !isOddNumOnes;</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>  <span class="comment">// add +- term coeff (avoiding thread divergence)</span></div>
<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>  sign = 1 - 2*isOddNumOnes; <span class="comment">// (-1 if isOddNumOnes, else +1)</span></div>
<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>  elem += coeffs[t] * sign;</div>
<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>  }</div>
<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>  </div>
<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>  opRe[i] = elem;</div>
<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>  opIm[i] = 0;</div>
<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>  }</div>
<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>  }</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>  <span class="comment">// we don't synch to GPU, because in GPU mode, the GPU populates and synchs to RAM</span></div>
<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>  <span class="comment">// agnostic_syncDiagonalOp(op);</span></div>
<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00306">DiagonalOp::chunkId</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00082">extractBit()</a>, <a class="el" href="QuEST_8h_source.html#l00310">DiagonalOp::imag</a>, <a class="el" href="QuEST_8h_source.html#l00302">DiagonalOp::numElemsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00287">PauliHamil::numQubits</a>, <a class="el" href="QuEST_8h_source.html#l00300">DiagonalOp::numQubits</a>, <a class="el" href="QuEST_8h_source.html#l00285">PauliHamil::numSumTerms</a>, <a class="el" href="QuEST_8h_source.html#l00096">PAULI_Z</a>, <a class="el" href="QuEST_8h_source.html#l00281">PauliHamil::pauliCodes</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00308">DiagonalOp::real</a>, and <a class="el" href="QuEST_8h_source.html#l00283">PauliHamil::termCoeffs</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01558">createDiagonalOpFromPauliHamilFile()</a>, and <a class="el" href="QuEST_8c_source.html#l01550">initDiagonalOpFromPauliHamil()</a>.</p>
</div>
</div>
<a id="ab58d6d599c7a729255b1f8eeded663f3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab58d6d599c7a729255b1f8eeded663f3">◆ </a></span>agnostic_setDiagonalOpElems()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void agnostic_setDiagonalOpElems </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structDiagonalOp.html">DiagonalOp</a> </td>
<td class="paramname"><em>op</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>real</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>imag</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int </td>
<td class="paramname"><em>numElems</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#l04228">4228</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="l04228"></a><span class="lineno"> 4228</span>  {</div>
<div class="line"><a name="l04229"></a><span class="lineno"> 4229</span>  </div>
<div class="line"><a name="l04230"></a><span class="lineno"> 4230</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="l04231"></a><span class="lineno"> 4231</span>  <span class="comment">// these may be negative or above qureg.numAmpsPerChunk</span></div>
<div class="line"><a name="l04232"></a><span class="lineno"> 4232</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> localStartInd = startInd - op.<a class="code" href="structDiagonalOp.html#aa91713a22c95a383bba55e56c4a4e37a">chunkId</a>*op.<a class="code" href="structDiagonalOp.html#a2c6eab631ef48b4978db026c98180eee">numElemsPerChunk</a>;</div>
<div class="line"><a name="l04233"></a><span class="lineno"> 4233</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> localEndInd = localStartInd + numElems; <span class="comment">// exclusive</span></div>
<div class="line"><a name="l04234"></a><span class="lineno"> 4234</span>  </div>
<div class="line"><a name="l04235"></a><span class="lineno"> 4235</span>  <span class="comment">// add this to a local index to get corresponding elem in reals & imags</span></div>
<div class="line"><a name="l04236"></a><span class="lineno"> 4236</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> offset = op.<a class="code" href="structDiagonalOp.html#aa91713a22c95a383bba55e56c4a4e37a">chunkId</a>*op.<a class="code" href="structDiagonalOp.html#a2c6eab631ef48b4978db026c98180eee">numElemsPerChunk</a> - startInd;</div>
<div class="line"><a name="l04237"></a><span class="lineno"> 4237</span>  </div>
<div class="line"><a name="l04238"></a><span class="lineno"> 4238</span>  <span class="comment">// restrict these indices to fit into this chunk</span></div>
<div class="line"><a name="l04239"></a><span class="lineno"> 4239</span>  <span class="keywordflow">if</span> (localStartInd < 0)</div>
<div class="line"><a name="l04240"></a><span class="lineno"> 4240</span>  localStartInd = 0;</div>
<div class="line"><a name="l04241"></a><span class="lineno"> 4241</span>  <span class="keywordflow">if</span> (localEndInd > op.<a class="code" href="structDiagonalOp.html#a2c6eab631ef48b4978db026c98180eee">numElemsPerChunk</a>)</div>
<div class="line"><a name="l04242"></a><span class="lineno"> 4242</span>  localEndInd = op.<a class="code" href="structDiagonalOp.html#a2c6eab631ef48b4978db026c98180eee">numElemsPerChunk</a>;</div>
<div class="line"><a name="l04243"></a><span class="lineno"> 4243</span>  <span class="comment">// they may now be out of order = no iterations</span></div>
<div class="line"><a name="l04244"></a><span class="lineno"> 4244</span>  </div>
<div class="line"><a name="l04245"></a><span class="lineno"> 4245</span>  <span class="comment">// unpacking OpenMP vars</span></div>
<div class="line"><a name="l04246"></a><span class="lineno"> 4246</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l04247"></a><span class="lineno"> 4247</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* vecRe = op.<a class="code" href="structDiagonalOp.html#a1d66088bed235d524cd452b107694d5c">real</a>;</div>
<div class="line"><a name="l04248"></a><span class="lineno"> 4248</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* vecIm = op.<a class="code" href="structDiagonalOp.html#a85c3f52533efe831bbe40b9a48602388">imag</a>;</div>
<div class="line"><a name="l04249"></a><span class="lineno"> 4249</span>  </div>
<div class="line"><a name="l04250"></a><span class="lineno"> 4250</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l04251"></a><span class="lineno"> 4251</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l04252"></a><span class="lineno"> 4252</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l04253"></a><span class="lineno"> 4253</span> <span class="preprocessor"> shared (localStartInd,localEndInd, vecRe,vecIm, real,imag, offset) \</span></div>
<div class="line"><a name="l04254"></a><span class="lineno"> 4254</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l04255"></a><span class="lineno"> 4255</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l04256"></a><span class="lineno"> 4256</span>  {</div>
<div class="line"><a name="l04257"></a><span class="lineno"> 4257</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l04258"></a><span class="lineno"> 4258</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l04259"></a><span class="lineno"> 4259</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l04260"></a><span class="lineno"> 4260</span>  <span class="comment">// iterate these local inds - this might involve no iterations</span></div>
<div class="line"><a name="l04261"></a><span class="lineno"> 4261</span>  <span class="keywordflow">for</span> (index=localStartInd; index < localEndInd; index++) {</div>
<div class="line"><a name="l04262"></a><span class="lineno"> 4262</span>  vecRe[index] = real[index + offset];</div>
<div class="line"><a name="l04263"></a><span class="lineno"> 4263</span>  vecIm[index] = imag[index + offset];</div>
<div class="line"><a name="l04264"></a><span class="lineno"> 4264</span>  }</div>
<div class="line"><a name="l04265"></a><span class="lineno"> 4265</span>  }</div>
<div class="line"><a name="l04266"></a><span class="lineno"> 4266</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00306">DiagonalOp::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00312">DiagonalOp::deviceOperator</a>, <a class="el" href="QuEST_8h_source.html#l00310">DiagonalOp::imag</a>, <a class="el" href="QuEST_8h_source.html#l00302">DiagonalOp::numElemsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00308">DiagonalOp::real</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01537">initDiagonalOp()</a>, and <a class="el" href="QuEST_8c_source.html#l01543">setDiagonalOpElems()</a>.</p>
</div>
</div>
<a id="a1e8f917ab42d38d8c37ba6816b24f2f5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1e8f917ab42d38d8c37ba6816b24f2f5">◆ </a></span>agnostic_syncDiagonalOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void agnostic_syncDiagonalOp </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structDiagonalOp.html">DiagonalOp</a> </td>
<td class="paramname"><em>op</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#l01373">1373</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="l01373"></a><span class="lineno"> 1373</span>  {</div>
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>  <span class="comment">// nothing to do on CPU</span></div>
<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00312">DiagonalOp::deviceOperator</a>, <a class="el" href="QuEST_8h_source.html#l00310">DiagonalOp::imag</a>, <a class="el" href="QuEST_8h_source.html#l00302">DiagonalOp::numElemsPerChunk</a>, and <a class="el" href="QuEST_8h_source.html#l00308">DiagonalOp::real</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01531">syncDiagonalOp()</a>.</p>
</div>
</div>
<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="aedd7ecccf2f09dd2f1c5d191950b51e6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aedd7ecccf2f09dd2f1c5d191950b51e6">◆ </a></span>densmatr_applyDiagonalOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_applyDiagonalOp </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="structDiagonalOp.html">DiagonalOp</a> </td>
<td class="paramname"><em>op</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#l01594">1594</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="l01594"></a><span class="lineno"> 1594</span>  {</div>
<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>  </div>
<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#aefba328e047e6ef4fd1ae4b56901aaa7">copyDiagOpIntoMatrixPairState</a>(qureg, op);</div>
<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>  <a class="code" href="QuEST__cpu_8c.html#afa58cf7cb98a25ab33621120c5c330d0">densmatr_applyDiagonalOpLocal</a>(qureg, op);</div>
<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01559">copyDiagOpIntoMatrixPairState()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l04082">densmatr_applyDiagonalOpLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00310">DiagonalOp::imag</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00308">DiagonalOp::real</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01127">applyDiagonalOp()</a>.</p>
</div>
</div>
<a id="a70e3b0a2297c186d5c779af31459b4ca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a70e3b0a2297c186d5c779af31459b4ca">◆ </a></span>densmatr_calcExpecDiagonalOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structComplex.html">Complex</a> densmatr_calcExpecDiagonalOp </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="structDiagonalOp.html">DiagonalOp</a> </td>
<td class="paramname"><em>op</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#l01618">1618</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="l01618"></a><span class="lineno"> 1618</span>  {</div>
<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>  </div>
<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>  <a class="code" href="structComplex.html">Complex</a> localVal = <a class="code" href="QuEST__cpu_8c.html#aeb4453a2e609e5359d2995bccf6663ca">densmatr_calcExpecDiagonalOpLocal</a>(qureg, op);</div>
<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a> == 1)</div>
<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>  <span class="keywordflow">return</span> localVal;</div>
<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>  </div>
<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> localRe = localVal.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>;</div>
<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> localIm = localVal.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a>;</div>
<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> globalRe, globalIm;</div>
<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>  </div>
<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>  MPI_Allreduce(&localRe, &globalRe, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>  MPI_Allreduce(&localIm, &globalIm, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</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>  <a class="code" href="structComplex.html">Complex</a> globalVal;</div>
<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>  globalVal.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = globalRe;</div>
<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>  globalVal.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = globalIm;</div>
<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>  <span class="keywordflow">return</span> globalVal;</div>
<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l01951">copySharedReduceBlock()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l04167">densmatr_calcExpecDiagonalOpLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00312">DiagonalOp::deviceOperator</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00348">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00338">Qureg::numChunks</a>, <a class="el" href="QuEST_8h_source.html#l00300">DiagonalOp::numQubits</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#l00348">Qureg::secondLevelReduction</a>, and <a class="el" href="QuEST__gpu_8cu_source.html#l02057">swapDouble()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01228">calcExpecDiagonalOp()</a>.</p>
</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#l00429">429</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="l00429"></a><span class="lineno"> 429</span>  {</div>
<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>  <span class="comment">// set qureg's pairState is to be the full pureState (on every node)</span></div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a95af772d87c461fc8abfd6d47b752ac2">copyVecIntoMatrixPairState</a>(qureg, pureState);</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">// collect calcFidelityLocal by every machine</span></div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</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="l00436"></a><span class="lineno"> 436</span>  </div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="comment">// sum each localSum</span></div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> globalSum;</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  MPI_Allreduce(&localSum, &globalSum, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  </div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">return</span> globalSum;</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l01951">copySharedReduceBlock()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00385">copyVecIntoMatrixPairState()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l01001">densmatr_calcFidelityLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00348">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00327">Qureg::numQubitsRepresented</a>, <a class="el" href="QuEST_8h_source.html#l00343">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#l00348">Qureg::secondLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, and <a class="el" href="QuEST__gpu_8cu_source.html#l02057">swapDouble()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01191">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#l00444">444</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="l00444"></a><span class="lineno"> 444</span>  {</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  </div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</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="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> globalSum;</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  MPI_Allreduce(&localSum, &globalSum, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  </div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> dist = sqrt(globalSum);</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordflow">return</span> dist;</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l01951">copySharedReduceBlock()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00934">densmatr_calcHilbertSchmidtDistanceSquaredLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00348">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00332">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#l00348">Qureg::secondLevelReduction</a>, and <a class="el" href="QuEST__gpu_8cu_source.html#l02057">swapDouble()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01237">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#l00455">455</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="l00455"></a><span class="lineno"> 455</span>  {</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  </div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</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="l00458"></a><span class="lineno"> 458</span>  </div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> globalSum;</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  MPI_Allreduce(&localSum, &globalSum, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  </div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> dist = globalSum;</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">return</span> dist;</div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l01951">copySharedReduceBlock()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00969">densmatr_calcInnerProductLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00348">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00334">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#l00348">Qureg::secondLevelReduction</a>, and <a class="el" href="QuEST__gpu_8cu_source.html#l02057">swapDouble()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01158">calcDensityInnerProduct()</a>.</p>
</div>
</div>
<a id="a2c664d8abca0a6f87c2bf4fe75fbff90"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2c664d8abca0a6f87c2bf4fe75fbff90">◆ </a></span>densmatr_calcProbOfAllOutcomes()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void densmatr_calcProbOfAllOutcomes </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> * </td>
<td class="paramname"><em>retProbs</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>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>qubits</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></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#l01349">1349</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="l01349"></a><span class="lineno"> 1349</span>  {</div>
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  </div>
<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  <span class="comment">// each node populates retProbs with contributions from the subset of amps in each</span></div>
<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  <a class="code" href="QuEST__cpu_8c.html#a73a6c5647862b882f4ed7d83ec3c3e1f">densmatr_calcProbOfAllOutcomesLocal</a>(retProbs, qureg, qubits, numQubits);</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>  <span class="comment">// then, retProbs are summed element-wise</span></div>
<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>  MPI_Allreduce(MPI_IN_PLACE, retProbs, 1LL<<numQubits, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu_8c_source.html#l03616">densmatr_calcProbOfAllOutcomesLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00327">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#l01176">calcProbOfAllOutcomes()</a>.</p>
</div>
</div>
<a id="ae37b3eff5d3affbc1edfe216cabc1c53"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae37b3eff5d3affbc1edfe216cabc1c53">◆ </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">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#l01328">1328</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="l01328"></a><span class="lineno"> 1328</span>  {</div>
<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>  </div>
<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> zeroProb = <a class="code" href="QuEST__cpu_8c.html#a8bea931504c90d9bd97e74645667804e">densmatr_findProbabilityOfZeroLocal</a>(qureg, measureQubit);</div>
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>  </div>
<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> outcomeProb;</div>
<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>  MPI_Allreduce(&zeroProb, &outcomeProb, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  <span class="keywordflow">if</span> (outcome == 1)</div>
<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  outcomeProb = 1.0 - outcomeProb;</div>
<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  </div>
<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  <span class="keywordflow">return</span> outcomeProb;</div>
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l02064">densmatr_findProbabilityOfZero()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03402">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#l01166">calcProbOfOutcome()</a>, <a class="el" href="QuEST_8c_source.html#l00966">collapseToOutcome()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00372">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#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>  <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="l01361"></a><span class="lineno"> 1361</span>  </div>
<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> globalPurity;</div>
<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  MPI_Allreduce(&localPurity, &globalPurity, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</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="keywordflow">return</span> globalPurity;</div>
<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l01951">copySharedReduceBlock()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00872">densmatr_calcPurityLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00348">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00332">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#l00348">Qureg::secondLevelReduction</a>, and <a class="el" href="QuEST__gpu_8cu_source.html#l02057">swapDouble()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01185">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#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00529">copyStateFromGPU()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00338">Qureg::numChunks</a>, <a class="el" href="QuEST_8h_source.html#l00327">Qureg::numQubitsRepresented</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01143">calcTotalProb()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00509">statevec_calcExpecPauliProd()</a>.</p>
</div>
</div>
<a id="a5658f2ecbbd4ea425db5f7dc7fc4ba92"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5658f2ecbbd4ea425db5f7dc7fc4ba92">◆ </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">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#l00791">791</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="l00791"></a><span class="lineno"> 791</span>  {</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  </div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <span class="comment">// only (global) indices (as bit sequence): '* outcome *(n+q) outcome *q are spared</span></div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="comment">// where n = measureQubit, q = qureg.numQubitsRepresented.</span></div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</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="l00796"></a><span class="lineno"> 796</span>  <span class="comment">// stepping in sub-blocks of 2^q, killing every second.</span></div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="comment">// When outcome=1, we offset the start of these blocks by their size.</span></div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</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="l00799"></a><span class="lineno"> 799</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="l00800"></a><span class="lineno"> 800</span>  </div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</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="l00802"></a><span class="lineno"> 802</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="l00803"></a><span class="lineno"> 803</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="l00804"></a><span class="lineno"> 804</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="l00805"></a><span class="lineno"> 805</span>  <span class="keywordtype">int</span> innerBit = <a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a>(measureQubit, globalStartInd);</div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keywordtype">int</span> outerBit = <a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a>(measureQubit + qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>, globalStartInd);</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">// If this chunk's amps are entirely inside an outer block</span></div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordflow">if</span> (locNumAmps <= outerBlockSize) {</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">// if this is an undesired outer block, kill all elems</span></div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keywordflow">if</span> (outerBit != outcome) {</div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</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="keywordflow">return</span>;</div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  }</div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  </div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</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="l00818"></a><span class="lineno"> 818</span>  <span class="keywordflow">if</span> (locNumAmps <= innerBlockSize) {</div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  </div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="comment">// and that inner block is undesired, kill all elems</span></div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="keywordflow">if</span> (innerBit != outcome) </div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</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="l00823"></a><span class="lineno"> 823</span>  <span class="comment">// otherwise normalise all elems</span></div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</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="l00826"></a><span class="lineno"> 826</span>  </div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  }</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  </div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</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="l00831"></a><span class="lineno"> 831</span>  <a class="code" href="QuEST__cpu_8c.html#a0abdff5f6065f9d57065345e6d90fc94">alternateNormZeroingSomeAmpBlocks</a>(</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  qureg, totalStateProb, innerBit==outcome, 0, qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>, innerBlockSize);</div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  }</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">// Otherwise, this chunk's amps contain multiple outer blocks (and hence multiple inner blocks)</span></div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</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="l00838"></a><span class="lineno"> 838</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> firstBlockInd;</div>
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  </div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</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="l00841"></a><span class="lineno"> 841</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="l00842"></a><span class="lineno"> 842</span>  <span class="comment">// inner parallelisation</span></div>
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">if</span> (outerBit == outcome) {</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">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="l00846"></a><span class="lineno"> 846</span>  firstBlockInd = outerDubBlockInd*2*outerBlockSize;</div>
<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">// *norm only the desired inner blocks in the desired outer block</span></div>
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <a class="code" href="QuEST__cpu_8c.html#a0abdff5f6065f9d57065345e6d90fc94">alternateNormZeroingSomeAmpBlocks</a>(</div>
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  qureg, totalStateProb, innerBit==outcome, </div>
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  firstBlockInd, outerBlockSize, innerBlockSize);</div>
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  </div>
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="comment">// zero the undesired outer block</span></div>
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <a class="code" href="QuEST__cpu_8c.html#ac5168399122f7f53977dcc9ceda4f458">zeroSomeAmps</a>(qureg, firstBlockInd + outerBlockSize, outerBlockSize);</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>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  </div>
<div class="line"><a name="l00859"></a><span class="lineno"> 859</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="l00860"></a><span class="lineno"> 860</span>  firstBlockInd = outerDubBlockInd*2*outerBlockSize;</div>
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  </div>
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <span class="comment">// same thing but undesired outer blocks come first</span></div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <a class="code" href="QuEST__cpu_8c.html#ac5168399122f7f53977dcc9ceda4f458">zeroSomeAmps</a>(qureg, firstBlockInd, outerBlockSize);</div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <a class="code" href="QuEST__cpu_8c.html#a0abdff5f6065f9d57065345e6d90fc94">alternateNormZeroingSomeAmpBlocks</a>(</div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  qureg, totalStateProb, innerBit==outcome, </div>
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  firstBlockInd + outerBlockSize, outerBlockSize, innerBlockSize);</div>
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  }</div>
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  }</div>
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  </div>
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu_8c_source.html#l00760">alternateNormZeroingSomeAmpBlocks()</a>, <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00082">extractBit()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00750">normaliseSomeAmps()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00327">Qureg::numQubitsRepresented</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l00740">zeroSomeAmps()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00888">applyProjector()</a>, <a class="el" href="QuEST_8c_source.html#l00966">collapseToOutcome()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00372">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#l01126">1126</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="l01127"></a><span class="lineno"> 1127</span> {</div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</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="l01130"></a><span class="lineno"> 1130</span>  </div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</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="l01133"></a><span class="lineno"> 1133</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="l01134"></a><span class="lineno"> 1134</span>  </div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="comment">// initialise the state to all zeros</span></div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> <span class="preprocessor"> shared (densityNumElems, densityReal, densityImag) \</span></div>
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> <span class="preprocessor"># endif</span></div>
<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="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  <span class="keywordflow">for</span> (index=0; index<densityNumElems; index++) {</div>
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  densityReal[index] = 0.0;</div>
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  densityImag[index] = 0.0;</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>  }</div>
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  </div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  <span class="comment">// index of the single density matrix elem to set non-zero</span></div>
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</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="l01155"></a><span class="lineno"> 1155</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="l01156"></a><span class="lineno"> 1156</span>  </div>
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  <span class="comment">// give the specified classical state prob 1</span></div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a> == densityInd / densityNumElems){</div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  densityReal[densityInd % densityNumElems] = 1.0;</div>
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  densityImag[densityInd % densityNumElems] = 0.0;</div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  }</div>
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00327">Qureg::numQubitsRepresented</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00134">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#l01165">1165</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="l01166"></a><span class="lineno"> 1166</span> {</div>
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</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="l01168"></a><span class="lineno"> 1168</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="l01169"></a><span class="lineno"> 1169</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="l01170"></a><span class="lineno"> 1170</span>  </div>
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *densityReal = qureg.stateVec.real;</div>
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> *densityImag = qureg.stateVec.imag;</div>
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  </div>
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</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="l01177"></a><span class="lineno"> 1177</span>  <span class="comment">// initialise the state to |+++..+++> = 1/normFactor {1, 1, 1, ...}</span></div>
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="preprocessor"> shared (chunkSize, densityReal, densityImag, probFactor) \</span></div>
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  {</div>
<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  <span class="keywordflow">for</span> (index=0; index<chunkSize; index++) {</div>
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>  densityReal[index] = probFactor;</div>
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  densityImag[index] = 0.0;</div>
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  }</div>
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  }</div>
<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00327">Qureg::numQubitsRepresented</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00125">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#l00466">466</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="l00466"></a><span class="lineno"> 466</span>  {</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  </div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordflow">if</span> (targetQureg.<a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a>==1){</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="comment">// local version</span></div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="comment">// save pointers to qureg's pair state</span></div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</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="l00472"></a><span class="lineno"> 472</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="l00473"></a><span class="lineno"> 473</span>  </div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="comment">// populate qureg pair state with pure state (by repointing)</span></div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</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="l00476"></a><span class="lineno"> 476</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="l00477"></a><span class="lineno"> 477</span>  </div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="comment">// populate density matrix via it's pairState</span></div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <a class="code" href="QuEST__cpu_8c.html#a1b36518c8fbbc3a5084bb4ad1fb05ea5">densmatr_initPureStateLocal</a>(targetQureg, copyQureg);</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="comment">// restore pointers</span></div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  targetQureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.real = quregPairRePtr;</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  targetQureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.imag = quregPairImPtr;</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</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="l00486"></a><span class="lineno"> 486</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a95af772d87c461fc8abfd6d47b752ac2">copyVecIntoMatrixPairState</a>(targetQureg, copyQureg);</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  </div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="comment">// update every density matrix chunk using pairState</span></div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <a class="code" href="QuEST__cpu_8c.html#a1b36518c8fbbc3a5084bb4ad1fb05ea5">densmatr_initPureStateLocal</a>(targetQureg, copyQureg);</div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  }</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__cpu__distributed_8c_source.html#l00385">copyVecIntoMatrixPairState()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l01195">densmatr_initPureStateLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00338">Qureg::numChunks</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00145">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#l00372">372</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="l00372"></a><span class="lineno"> 372</span>  {</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  </div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> zeroProb = <a class="code" href="QuEST__internal_8h.html#ae37b3eff5d3affbc1edfe216cabc1c53">densmatr_calcProbOfOutcome</a>(qureg, measureQubit, 0);</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</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="l00376"></a><span class="lineno"> 376</span>  <a class="code" href="QuEST__internal_8h.html#a5658f2ecbbd4ea425db5f7dc7fc4ba92">densmatr_collapseToKnownProbOutcome</a>(qureg, measureQubit, outcome, *outcomeProb);</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordflow">return</span> outcome;</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01328">densmatr_calcProbOfOutcome()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00791">densmatr_collapseToKnownProbOutcome()</a>, <a class="el" href="QuEST__common_8c_source.html#l00168">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#l00998">measure()</a>, and <a class="el" href="QuEST_8c_source.html#l00985">measureWithStats()</a>.</p>
</div>
</div>
<a id="ac501fe7b9d331be48359ce1546348f97"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac501fe7b9d331be48359ce1546348f97">◆ </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">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#l00739">739</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="l00739"></a><span class="lineno"> 739</span>  {</div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keywordflow">if</span> (damping == 0)</div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <span class="keywordflow">return</span>;</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>  <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="l00744"></a><span class="lineno"> 744</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  </div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</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="l00747"></a><span class="lineno"> 747</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>, targetQubit);</div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  </div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <a class="code" href="QuEST__cpu_8c.html#ab124a3a9956046bf9c0e1e3ae9171f42">densmatr_mixDampingLocal</a>(qureg, targetQubit, damping);</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</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="l00753"></a><span class="lineno"> 753</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a0eb14d48920ea469b0904ae63b47b589">compressPairVectorForSingleQubitDepolarise</a>(qureg, targetQubit);</div>
<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>  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="l00756"></a><span class="lineno"> 756</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</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="l00758"></a><span class="lineno"> 758</span>  targetQubit, qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  </div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a>(qureg, pairRank);</div>
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <a class="code" href="QuEST__cpu_8c.html#a8d9c19a3424f0ad89bfbfd920d65301d">densmatr_mixDampingDistributed</a>(qureg, targetQubit, damping);</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>  </div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00250">chunkIsUpperInOuterBlock()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00557">compressPairVectorForSingleQubitDepolarise()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00377">densityMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00306">densmatr_mixDampingDistributed()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00180">densmatr_mixDampingLocal()</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l02879">densmatr_oneQubitDegradeOffDiagonal()</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00523">exchangePairStateVectorHalves()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00328">getChunkOuterBlockPairId()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00327">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#l01283">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#l00901">901</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="l00901"></a><span class="lineno"> 901</span>  {</div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  </div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <span class="comment">/* corresponding amplitudes live on the same node (same dimensions) */</span></div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  </div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  <span class="comment">// unpack vars for OpenMP</span></div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</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="l00907"></a><span class="lineno"> 907</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="l00908"></a><span class="lineno"> 908</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="l00909"></a><span class="lineno"> 909</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="l00910"></a><span class="lineno"> 910</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="l00911"></a><span class="lineno"> 911</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  </div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="preprocessor"> shared (combineVecRe,combineVecIm,otherVecRe,otherVecIm, otherProb, numAmps) \</span></div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <span class="preprocessor"> private (index)</span></div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="preprocessor"># endif </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> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  <span class="keywordflow">for</span> (index=0; index < numAmps; index++) {</div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  combineVecRe[index] *= 1-otherProb;</div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  combineVecIm[index] *= 1-otherProb;</div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  </div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  combineVecRe[index] += otherProb * otherVecRe[index];</div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  combineVecIm[index] += otherProb * otherVecIm[index];</div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  }</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  }</div>
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01012">mixDensityMatrix()</a>.</p>
</div>
</div>
<a id="aa31f0ef43a921c3ac73545d1d3670fa1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa31f0ef43a921c3ac73545d1d3670fa1">◆ </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">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#l00085">85</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="l00085"></a><span class="lineno"> 85</span>  {</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> retain=1-dephase;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <a class="code" href="QuEST__cpu_8c.html#a717a0448066831cb5b392bcf2e1d0529">densmatr_oneQubitDegradeOffDiagonal</a>(qureg, targetQubit, retain);</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu_8c_source.html#l00054">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#l03022">densmatr_mixDepolarising()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00230">densmatr_mixDepolarisingDistributed()</a>, and <a class="el" href="QuEST_8c_source.html#l01250">mixDephasing()</a>.</p>
</div>
</div>
<a id="a398b60c4cb4fa2cf2ffc126de6c08da0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a398b60c4cb4fa2cf2ffc126de6c08da0">◆ </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">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#l00712">712</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="l00712"></a><span class="lineno"> 712</span>  {</div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <span class="keywordflow">if</span> (depolLevel == 0)</div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <span class="keywordflow">return</span>;</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>  <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="l00717"></a><span class="lineno"> 717</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  </div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</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="l00720"></a><span class="lineno"> 720</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>, targetQubit);</div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  </div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <a class="code" href="QuEST__cpu_8c.html#ab750fb47da2fca9849c678c869e40e69">densmatr_mixDepolarisingLocal</a>(qureg, targetQubit, depolLevel);</div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</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="l00726"></a><span class="lineno"> 726</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a0eb14d48920ea469b0904ae63b47b589">compressPairVectorForSingleQubitDepolarise</a>(qureg, targetQubit);</div>
<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>  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="l00729"></a><span class="lineno"> 729</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</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="l00731"></a><span class="lineno"> 731</span>  targetQubit, qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  </div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a>(qureg, pairRank);</div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <a class="code" href="QuEST__cpu_8c.html#a88670d0e7cebe33f61c1dd98daa338b3">densmatr_mixDepolarisingDistributed</a>(qureg, targetQubit, depolLevel);</div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  }</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> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00250">chunkIsUpperInOuterBlock()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00557">compressPairVectorForSingleQubitDepolarise()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00377">densityMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l02899">densmatr_mixDephasing()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00230">densmatr_mixDepolarisingDistributed()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00131">densmatr_mixDepolarisingLocal()</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00523">exchangePairStateVectorHalves()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00328">getChunkOuterBlockPairId()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00327">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#l01272">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#l00644">644</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="l00644"></a><span class="lineno"> 644</span>  {</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>  <a class="code" href="structComplexMatrix4.html">ComplexMatrix4</a> superOp; </div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <a class="code" href="QuEST__common_8c.html#abd00ba1321c9bd43c3a9119f5b3ed1be">populateKrausSuperOperator2</a>(&superOp, ops, numOps);</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <a class="code" href="QuEST__common_8c.html#af3db21114efc431ae7a7ae06fc2d7b5b">densmatr_applyKrausSuperoperator</a>(qureg, target, superOp);</div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00620">densmatr_applyKrausSuperoperator()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00607">populateKrausSuperOperator2()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00743">densmatr_mixPauli()</a>, and <a class="el" href="QuEST_8c_source.html#l01314">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#l00701">701</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="l00701"></a><span class="lineno"> 701</span>  {</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  </div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <a class="code" href="structComplexMatrixN.html">ComplexMatrixN</a> superOp;</div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  </div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="comment">/* superOp will contain 2^(4 numTargets) complex numbers.</span></div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="comment"> * At double precision, superOp will cost additional memory:</span></div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="comment"> * numTargs=1 -> 0.25 KiB</span></div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="comment"> * numTargs=2 -> 4 KiB </span></div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="comment"> * numTargs=3 -> 64 KiB</span></div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="comment"> * numTargs=4 -> 1 MiB</span></div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="comment"> * numTargs=5 -> 16 MiB.</span></div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</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="l00713"></a><span class="lineno"> 713</span> <span class="comment"> * this costs at most double.</span></div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</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="l00716"></a><span class="lineno"> 716</span> <span class="comment"> * maximum stack-space allocation (numTargs >= 5 exceeding Linux' 8 MB). Therefore, </span></div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</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="l00718"></a><span class="lineno"> 718</span> <span class="comment"> */</span></div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  </div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <span class="comment">// if NOT on Windows, allocate ComplexN on stack depending on size</span></div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="preprocessor"> #ifndef _WIN32</span></div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="keywordflow">if</span> (numTargets < 4) {</div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="comment">// everything must live in 'if' since this macro declares local vars</span></div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <a class="code" href="QuEST__common_8c.html#a4da103b16292ffd99197d05c5fa83712">macro_allocStackComplexMatrixN</a>(superOp, 2*numTargets);</div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <a class="code" href="QuEST__common_8c.html#a6dcb85ef8e1257813af0dc306082caf8">populateKrausSuperOperatorN</a>(&superOp, ops, numOps);</div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <a class="code" href="QuEST__common_8c.html#a514ca44595676abf4bc2e10fc48ef970">densmatr_applyMultiQubitKrausSuperoperator</a>(qureg, targets, numTargets, superOp);</div>
<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">else</span> {</div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  superOp = <a class="code" href="group__type.html#ga815103261fb22ea9690e1427571df00e">createComplexMatrixN</a>(2*numTargets);</div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <a class="code" href="QuEST__common_8c.html#a6dcb85ef8e1257813af0dc306082caf8">populateKrausSuperOperatorN</a>(&superOp, ops, numOps);</div>
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <a class="code" href="QuEST__common_8c.html#a514ca44595676abf4bc2e10fc48ef970">densmatr_applyMultiQubitKrausSuperoperator</a>(qureg, targets, numTargets, superOp);</div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <a class="code" href="group__type.html#ga9df2f3d86be4a6e9aad481665e5e6753">destroyComplexMatrixN</a>(superOp);</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="comment">// on Windows, we must always create in heap</span></div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="preprocessor"> #else</span></div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  superOp = <a class="code" href="group__type.html#ga815103261fb22ea9690e1427571df00e">createComplexMatrixN</a>(2*numTargets);</div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <a class="code" href="QuEST__common_8c.html#a6dcb85ef8e1257813af0dc306082caf8">populateKrausSuperOperatorN</a>(&superOp, ops, numOps);</div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <a class="code" href="QuEST__common_8c.html#a514ca44595676abf4bc2e10fc48ef970">densmatr_applyMultiQubitKrausSuperoperator</a>(qureg, targets, numTargets, superOp);</div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <a class="code" href="group__type.html#ga9df2f3d86be4a6e9aad481665e5e6753">destroyComplexMatrixN</a>(superOp);</div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="preprocessor"> #endif</span></div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8c_source.html#l01348">createComplexMatrixN()</a>, <a class="el" href="QuEST__common_8c_source.html#l00634">densmatr_applyMultiQubitKrausSuperoperator()</a>, <a class="el" href="QuEST_8c_source.html#l01369">destroyComplexMatrixN()</a>, <a class="el" href="QuEST__common_8c_source.html#l00675">macro_allocStackComplexMatrixN</a>, and <a class="el" href="QuEST__common_8c_source.html#l00615">populateKrausSuperOperatorN()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01334">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#l00743">743</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="l00743"></a><span class="lineno"> 743</span>  {</div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  </div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="comment">// convert pauli probabilities into Kraus map</span></div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> numOps = 4;</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <a class="code" href="structComplexMatrix2.html">ComplexMatrix2</a> ops[4]; <span class="comment">// [numOps];</span></div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> n=0; n < numOps; n++)</div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</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="l00750"></a><span class="lineno"> 750</span>  </div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</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="l00752"></a><span class="lineno"> 752</span>  sqrt(1-(probX + probY + probZ)),</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  sqrt(probX),</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  sqrt(probY),</div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  sqrt(probZ)</div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  };</div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</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="l00758"></a><span class="lineno"> 758</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="l00759"></a><span class="lineno"> 759</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="l00760"></a><span class="lineno"> 760</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="l00761"></a><span class="lineno"> 761</span>  </div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <a class="code" href="QuEST__common_8c.html#ab987904f721746d1176aba7ac6b566fa">densmatr_mixKrausMap</a>(qureg, qubit, ops, numOps);</div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00644">densmatr_mixKrausMap()</a>, <a class="el" href="QuEST_8h_source.html#l00140">ComplexMatrix2::imag</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00139">ComplexMatrix2::real</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01303">mixPauli()</a>.</p>
</div>
</div>
<a id="a623e577b7230f3c8dc202be6185b4289"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a623e577b7230f3c8dc202be6185b4289">◆ </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">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>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#l00090">90</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="l00090"></a><span class="lineno"> 90</span>  {</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> retain=1-dephase;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  </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> numTasks = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</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> innerMaskQubit1 = 1LL << qubit1;</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> outerMaskQubit1 = 1LL << (qubit1 + (qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>));</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> innerMaskQubit2 = 1LL << qubit2;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</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="l00098"></a><span class="lineno"> 98</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="l00099"></a><span class="lineno"> 99</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="l00100"></a><span class="lineno"> 100</span>  </div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> thisTask;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> thisPatternQubit1, thisPatternQubit2;</div>
<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> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor"> shared (innerMaskQubit1,outerMaskQubit1,totMaskQubit1,innerMaskQubit2,outerMaskQubit2, \</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor"> totMaskQubit2,qureg,retain,numTasks) \</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="preprocessor"> private (thisTask,thisPatternQubit1,thisPatternQubit2)</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">for</span> (thisTask=0; thisTask<numTasks; thisTask++){</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</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="l00117"></a><span class="lineno"> 117</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="l00118"></a><span class="lineno"> 118</span>  </div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="comment">// any mismatch |...0...><...1...| etc</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">if</span> ( (thisPatternQubit1==innerMaskQubit1) || (thisPatternQubit1==outerMaskQubit1) || </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  (thisPatternQubit2==innerMaskQubit2) || (thisPatternQubit2==outerMaskQubit2) ){ </div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="comment">// do dephase</span></div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</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="l00124"></a><span class="lineno"> 124</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="l00125"></a><span class="lineno"> 125</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="l00126"></a><span class="lineno"> 126</span>  } </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>  }</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00327">Qureg::numQubitsRepresented</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00766">densmatr_mixTwoQubitDepolarising()</a>, and <a class="el" href="QuEST_8c_source.html#l01260">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#l00766">766</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="l00766"></a><span class="lineno"> 766</span>  {</div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <span class="keywordflow">if</span> (depolLevel == 0)</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  <span class="keywordtype">int</span> rankIsUpperBiggerQubit, rankIsUpperSmallerQubit;</div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <span class="keywordtype">int</span> biggerQubit, smallerQubit;</div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  </div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <a class="code" href="QuEST__internal_8h.html#a623e577b7230f3c8dc202be6185b4289">densmatr_mixTwoQubitDephasing</a>(qureg, qubit1, qubit2, depolLevel);</div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  </div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> eta = 2/depolLevel;</div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</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="l00777"></a><span class="lineno"> 777</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> gamma = 1+delta;</div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  gamma = 1/(gamma*gamma*gamma);</div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> GAMMA_PARTS_1_OR_2 = 1.0;</div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  <span class="comment">// TODO -- test delta too small</span></div>
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <span class="comment">/* </span></div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="comment"> if (fabs(4*delta*(1+delta)*gamma-depolLevel)>1e-5){</span></div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="comment"> printf("Numerical error in delta; for small error rates try Taylor expansion.\n");</span></div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="comment"> exit(1);</span></div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="comment"> }</span></div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="comment"> */</span></div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  </div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  biggerQubit = qubit1 > qubit2 ? qubit1 : qubit2;</div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  smallerQubit = qubit1 < qubit2 ? qubit1 : qubit2;</div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <span class="keywordtype">int</span> useLocalDataOnlyBigQubit, useLocalDataOnlySmallQubit;</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>  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="l00793"></a><span class="lineno"> 793</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>, biggerQubit);</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="keywordflow">if</span> (useLocalDataOnlyBigQubit){</div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="comment">// does parts 1, 2 and 3 locally in one go</span></div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <a class="code" href="QuEST__cpu_8c.html#a3510f01d4d15dcc545564eb84c668cad">densmatr_mixTwoQubitDepolarisingLocal</a>(qureg, qubit1, qubit2, delta, gamma);</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</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="l00799"></a><span class="lineno"> 799</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>, smallerQubit);</div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  <span class="keywordflow">if</span> (useLocalDataOnlySmallQubit){</div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="comment">// do part 1 locally</span></div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <a class="code" href="QuEST__cpu_8c.html#ae90f82418e0aa67218d733dbbc681998">densmatr_mixTwoQubitDepolarisingLocalPart1</a>(qureg, smallerQubit, biggerQubit, delta);</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">// do parts 2 and 3 distributed (if part 2 is distributed part 3 is also distributed)</span></div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</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="l00806"></a><span class="lineno"> 806</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a373394db1bf71b0be63585c0e9a52abb">compressPairVectorForTwoQubitDepolarise</a>(qureg, smallerQubit, biggerQubit);</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</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="l00808"></a><span class="lineno"> 808</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</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="l00810"></a><span class="lineno"> 810</span>  biggerQubit, qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  </div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a>(qureg, pairRank);</div>
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <a class="code" href="QuEST__cpu_8c.html#a2f76ec8f08e19bb8e1254aafb10e160e">densmatr_mixTwoQubitDepolarisingDistributed</a>(qureg, smallerQubit, biggerQubit, delta, GAMMA_PARTS_1_OR_2);</div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  </div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="comment">// part 3 will be distributed but involve rearranging for the smaller qubit</span></div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a373394db1bf71b0be63585c0e9a52abb">compressPairVectorForTwoQubitDepolarise</a>(qureg, smallerQubit, biggerQubit);</div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</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="l00818"></a><span class="lineno"> 818</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</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="l00820"></a><span class="lineno"> 820</span>  biggerQubit, qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  </div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a>(qureg, pairRank);</div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  <a class="code" href="QuEST__cpu_8c.html#acabdfbd3184d3ab3bded61e24142b800">densmatr_mixTwoQubitDepolarisingQ1LocalQ2DistributedPart3</a>(qureg, smallerQubit, biggerQubit, delta, gamma);</div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="comment">// do part 1, 2 and 3 distributed</span></div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="comment">// part 1</span></div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a373394db1bf71b0be63585c0e9a52abb">compressPairVectorForTwoQubitDepolarise</a>(qureg, smallerQubit, biggerQubit);</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</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="l00829"></a><span class="lineno"> 829</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</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="l00831"></a><span class="lineno"> 831</span>  smallerQubit, qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</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>  <a class="code" href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a>(qureg, pairRank);</div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <a class="code" href="QuEST__cpu_8c.html#a2f76ec8f08e19bb8e1254aafb10e160e">densmatr_mixTwoQubitDepolarisingDistributed</a>(qureg, smallerQubit, biggerQubit, delta, GAMMA_PARTS_1_OR_2);</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">// part 2</span></div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a373394db1bf71b0be63585c0e9a52abb">compressPairVectorForTwoQubitDepolarise</a>(qureg, smallerQubit, biggerQubit);</div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</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="l00839"></a><span class="lineno"> 839</span>  qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</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="l00841"></a><span class="lineno"> 841</span>  biggerQubit, qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>);</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>  <a class="code" href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a>(qureg, pairRank);</div>
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <a class="code" href="QuEST__cpu_8c.html#a2f76ec8f08e19bb8e1254aafb10e160e">densmatr_mixTwoQubitDepolarisingDistributed</a>(qureg, smallerQubit, biggerQubit, delta, GAMMA_PARTS_1_OR_2);</div>
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  </div>
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="comment">// part 3</span></div>
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a373394db1bf71b0be63585c0e9a52abb">compressPairVectorForTwoQubitDepolarise</a>(qureg, smallerQubit, biggerQubit);</div>
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  pairRank = <a class="code" href="QuEST__cpu__distributed_8c.html#ab1ec7f241b68b079c8e316d190af49ce">getChunkOuterBlockPairIdForPart3</a>(rankIsUpperSmallerQubit, rankIsUpperBiggerQubit, </div>
<div class="line"><a name="l00849"></a><span class="lineno"> 849</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="l00850"></a><span class="lineno"> 850</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a37dae401754961c9100b3c0907913c3e">exchangePairStateVectorHalves</a>(qureg, pairRank);</div>
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <a class="code" href="QuEST__cpu_8c.html#a2f76ec8f08e19bb8e1254aafb10e160e">densmatr_mixTwoQubitDepolarisingDistributed</a>(qureg, smallerQubit, biggerQubit, delta, gamma);</div>
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  </div>
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  }</div>
<div class="line"><a name="l00854"></a><span class="lineno"> 854</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> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00250">chunkIsUpperInOuterBlock()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00624">compressPairVectorForTwoQubitDepolarise()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00377">densityMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00090">densmatr_mixTwoQubitDephasing()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00547">densmatr_mixTwoQubitDepolarisingDistributed()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00393">densmatr_mixTwoQubitDepolarisingLocal()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00494">densmatr_mixTwoQubitDepolarisingLocalPart1()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l00638">densmatr_mixTwoQubitDepolarisingQ1LocalQ2DistributedPart3()</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00523">exchangePairStateVectorHalves()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00328">getChunkOuterBlockPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00339">getChunkOuterBlockPairIdForPart3()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00327">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#l01291">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#l00682">682</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="l00682"></a><span class="lineno"> 682</span>  {</div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  </div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="comment">// if NOT on Windows, allocate ComplexN on stack</span></div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="preprocessor"> #ifndef _WIN32</span></div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <a class="code" href="structComplexMatrixN.html">ComplexMatrixN</a> superOp;</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <a class="code" href="QuEST__common_8c.html#a4da103b16292ffd99197d05c5fa83712">macro_allocStackComplexMatrixN</a>(superOp, 4);</div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <a class="code" href="QuEST__common_8c.html#a2a6999e47bed978eb66f589c8abc7766">populateKrausSuperOperator4</a>(&superOp, ops, numOps);</div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <a class="code" href="QuEST__common_8c.html#a3d39314af5d88822d4aefb5e9cc4e2f6">densmatr_applyTwoQubitKrausSuperoperator</a>(qureg, target1, target2, superOp);</div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  </div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="comment">// but on Windows, we MUST allocated dynamically</span></div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="preprocessor"> #else</span></div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <a class="code" href="structComplexMatrixN.html">ComplexMatrixN</a> superOp = <a class="code" href="group__type.html#ga815103261fb22ea9690e1427571df00e">createComplexMatrixN</a>(4);</div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <a class="code" href="QuEST__common_8c.html#a2a6999e47bed978eb66f589c8abc7766">populateKrausSuperOperator4</a>(&superOp, ops, numOps);</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <a class="code" href="QuEST__common_8c.html#a3d39314af5d88822d4aefb5e9cc4e2f6">densmatr_applyTwoQubitKrausSuperoperator</a>(qureg, target1, target2, superOp);</div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <a class="code" href="group__type.html#ga9df2f3d86be4a6e9aad481665e5e6753">destroyComplexMatrixN</a>(superOp);</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  </div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="preprocessor"> #endif</span></div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8c_source.html#l01348">createComplexMatrixN()</a>, <a class="el" href="QuEST__common_8c_source.html#l00626">densmatr_applyTwoQubitKrausSuperoperator()</a>, <a class="el" href="QuEST_8c_source.html#l01369">destroyComplexMatrixN()</a>, <a class="el" href="QuEST__common_8c_source.html#l00675">macro_allocStackComplexMatrixN</a>, and <a class="el" href="QuEST__common_8c_source.html#l00611">populateKrausSuperOperator4()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01324">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#l00070">70</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="l00070"></a><span class="lineno"> 70</span>  {</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">if</span> (*ind1 > *ind2) {</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordtype">int</span> copy = *ind1;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  *ind1 = *ind2;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  *ind2 = copy;</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><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01260">mixTwoQubitDephasing()</a>, and <a class="el" href="QuEST_8c_source.html#l01291">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#l00142">142</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="l00142"></a><span class="lineno"> 142</span>  {</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  </div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</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="l00145"></a><span class="lineno"> 145</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="l00146"></a><span class="lineno"> 146</span>  *globalPhase = (r0c0Phase + r1c1Phase)/2.0;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  </div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> cosPhase = cos(*globalPhase);</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> sinPhase = sin(*globalPhase);</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</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="l00151"></a><span class="lineno"> 151</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="l00152"></a><span class="lineno"> 152</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="l00153"></a><span class="lineno"> 153</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="l00154"></a><span class="lineno"> 154</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#l00140">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#l00139">ComplexMatrix2::real</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__qasm_8c_source.html#l00279">qasm_recordControlledUnitary()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00342">qasm_recordMultiControlledUnitary()</a>, and <a class="el" href="QuEST__qasm_8c_source.html#l00208">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#l00120">120</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="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>  <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="l00123"></a><span class="lineno"> 123</span>  alpha-><a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = cos(angle/2.0);</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</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="l00125"></a><span class="lineno"> 125</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="l00126"></a><span class="lineno"> 126</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="l00127"></a><span class="lineno"> 127</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00084">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#l00200">Vector::x</a>, <a class="el" href="QuEST_8h_source.html#l00200">Vector::y</a>, and <a class="el" href="QuEST_8h_source.html#l00200">Vector::z</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__qasm_8c_source.html#l00224">qasm_recordAxisRotation()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00301">qasm_recordControlledAxisRotation()</a>, <a class="el" href="QuEST__common_8c_source.html#l00330">statevec_controlledRotateAroundAxis()</a>, <a class="el" href="QuEST__common_8c_source.html#l00337">statevec_controlledRotateAroundAxisConj()</a>, <a class="el" href="QuEST__common_8c_source.html#l00314">statevec_rotateAroundAxis()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00321">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#l00105">105</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="l00105"></a><span class="lineno"> 105</span>  {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <a class="code" href="structComplexMatrix2.html">ComplexMatrix2</a> conj;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <a class="code" href="QuEST__common_8c.html#ae2b222fda52c10fb420cb3ac78ca31e4">macro_setConjugateMatrix</a>(conj, src, 2);</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">return</span> conj;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00099">macro_setConjugateMatrix</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00360">controlledUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00373">multiControlledUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00388">multiStateControlledUnitary()</a>, and <a class="el" href="QuEST_8c_source.html#l00348">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#l00110">110</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="l00110"></a><span class="lineno"> 110</span>  {</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="structComplexMatrix4.html">ComplexMatrix4</a> conj;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="QuEST__common_8c.html#ae2b222fda52c10fb420cb3ac78ca31e4">macro_setConjugateMatrix</a>(conj, src, 4);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">return</span> conj;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00099">macro_setConjugateMatrix</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00269">controlledTwoQubitUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00282">multiControlledTwoQubitUnitary()</a>, and <a class="el" href="QuEST_8c_source.html#l00256">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#l00091">91</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="l00091"></a><span class="lineno"> 91</span>  {</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="structComplex.html">Complex</a> conjScalar;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</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="l00095"></a><span class="lineno"> 95</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="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">return</span> conjScalar;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</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#l00404">compactUnitary()</a>, and <a class="el" href="QuEST_8c_source.html#l00417">controlledCompactUnitary()</a>.</p>
</div>
</div>
<a id="a6fa6f1bc617e9fef3cd87ecc3677a02b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6fa6f1bc617e9fef3cd87ecc3677a02b">◆ </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">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#l00060">60</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="l00060"></a><span class="lineno"> 60</span>  {</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </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> mask=0;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i<numControlQubits; i++)</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">if</span> (controlState[i] == 0)</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  mask = mask | (1LL << controlQubits[i]);</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">return</span> mask;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00388">multiStateControlledUnitary()</a>.</p>
</div>
</div>
<a id="a0182eedcff44469771c971d8e2d73dc5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0182eedcff44469771c971d8e2d73dc5">◆ </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">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#l00050">50</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="l00050"></a><span class="lineno"> 50</span>  {</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> mask=0; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i<numQubits; i++)</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  mask = mask | (1LL << qubits[i]);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">return</span> mask;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01114">applyMultiControlledMatrixN()</a>, <a class="el" href="QuEST_8c_source.html#l00549">multiControlledMultiQubitNot()</a>, <a class="el" href="QuEST_8c_source.html#l00330">multiControlledMultiQubitUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00705">multiControlledMultiRotatePauli()</a>, <a class="el" href="QuEST_8c_source.html#l00668">multiControlledMultiRotateZ()</a>, <a class="el" href="QuEST_8c_source.html#l00282">multiControlledTwoQubitUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00373">multiControlledUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00536">multiQubitNot()</a>, <a class="el" href="QuEST_8c_source.html#l00652">multiRotateZ()</a>, <a class="el" href="QuEST_8c_source.html#l00388">multiStateControlledUnitary()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01514">statevec_multiControlledMultiQubitUnitary()</a>, <a class="el" href="QuEST__common_8c_source.html#l00453">statevec_multiControlledMultiRotatePauli()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03718">statevec_multiControlledPhaseFlip()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03266">statevec_multiControlledPhaseShift()</a>, <a class="el" href="QuEST__common_8c_source.html#l00414">statevec_multiRotatePauli()</a>, and <a class="el" href="QuEST__validation_8c_source.html#l00459">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#l00195">195</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="l00195"></a><span class="lineno"> 195</span>  {</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="comment">// init MT random number generator with two keys -- time and pid</span></div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</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="l00198"></a><span class="lineno"> 198</span>  <span class="comment">// used by the master process</span></div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor">#if defined(_WIN32) && ! defined(__MINGW32__)</span></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>  <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="l00202"></a><span class="lineno"> 202</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="l00203"></a><span class="lineno"> 203</span>  </div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  key[0] = msecs; key[1] = pid;</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="preprocessor">#else</span></div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keyword">struct </span>timeval tv;</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  gettimeofday(&tv, NULL);</div>
<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">double</span> time_in_mill =</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</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="l00211"></a><span class="lineno"> 211</span>  </div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> pid = getpid();</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</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="l00214"></a><span class="lineno"> 214</span>  </div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  key[0] = msecs; key[1] = pid;</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor">#endif </span></div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01614">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#l00079">79</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="l00079"></a><span class="lineno"> 79</span>  {</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  </div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</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="l00082"></a><span class="lineno"> 82</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00200">Vector::x</a>, <a class="el" href="QuEST_8h_source.html#l00200">Vector::y</a>, and <a class="el" href="QuEST_8h_source.html#l00200">Vector::z</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00084">getUnitVector()</a>, and <a class="el" href="QuEST__validation_8c_source.html#l00511">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#l00130">130</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="l00130"></a><span class="lineno"> 130</span>  {</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  </div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</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="l00133"></a><span class="lineno"> 133</span>  *ry = 2.0 * acos(alphaMag);</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  </div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</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="l00136"></a><span class="lineno"> 136</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="l00137"></a><span class="lineno"> 137</span>  *rz2 = - alphaPhase + betaPhase;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  *rz1 = - alphaPhase - betaPhase;</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</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#l00224">qasm_recordAxisRotation()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00196">qasm_recordCompactUnitary()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00301">qasm_recordControlledAxisRotation()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00265">qasm_recordControlledCompactUnitary()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00279">qasm_recordControlledUnitary()</a>, <a class="el" href="QuEST__qasm_8c_source.html#l00342">qasm_recordMultiControlledUnitary()</a>, and <a class="el" href="QuEST__qasm_8c_source.html#l00208">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#l00185">185</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="l00185"></a><span class="lineno"> 185</span>  {</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> hash = 5381;</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordtype">int</span> c;</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  </div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">while</span> ((c = *str++))</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  hash = ((hash << 5) + hash) + c; <span class="comment">/* hash * 33 + c */</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  </div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">return</span> hash; </div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</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#l00115">115</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="l00115"></a><span class="lineno"> 115</span>  {</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordtype">int</span> len = 1 << m.<a class="code" href="structComplexMatrixN.html#a606f7afbc3f65a596bdca21cb43be6a8">numQubits</a>;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="QuEST__common_8c.html#ae2b222fda52c10fb420cb3ac78ca31e4">macro_setConjugateMatrix</a>(m, m, len);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00099">macro_setConjugateMatrix</a>, and <a class="el" href="QuEST_8h_source.html#l00188">ComplexMatrixN::numQubits</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00313">controlledMultiQubitUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00330">multiControlledMultiQubitUnitary()</a>, and <a class="el" href="QuEST_8c_source.html#l00296">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#l00156">156</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="l00156"></a><span class="lineno"> 156</span>  {</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j=0; j < numIndices; j++)</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  indices[j] += shift;</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00726">applyPhaseFunc()</a>, <a class="el" href="QuEST_8c_source.html#l00743">applyPhaseFuncOverrides()</a>, <a class="el" href="QuEST_8c_source.html#l00313">controlledMultiQubitUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00330">multiControlledMultiQubitUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00705">multiControlledMultiRotatePauli()</a>, <a class="el" href="QuEST_8c_source.html#l00587">multiControlledPhaseFlip()</a>, <a class="el" href="QuEST_8c_source.html#l00510">multiControlledPhaseShift()</a>, <a class="el" href="QuEST_8c_source.html#l00296">multiQubitUnitary()</a>, and <a class="el" href="QuEST_8c_source.html#l00685">multiRotatePauli()</a>.</p>
</div>
</div>
<a id="aecc3c36b275c53b321de1611c2f06f78"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aecc3c36b275c53b321de1611c2f06f78">◆ </a></span>shiftSubregIndices()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void shiftSubregIndices </td>
<td>(</td>
<td class="paramtype">int * </td>
<td class="paramname"><em>allInds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>numIndsPerReg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numRegs</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#l00161">161</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="l00161"></a><span class="lineno"> 161</span>  {</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordtype">int</span> i=0;</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> r=0; r<numRegs; r++)</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j=0; j<numIndsPerReg[r]; j++)</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  allInds[i++] += shift;</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00849">agnostic_applyQFT()</a>, <a class="el" href="QuEST_8c_source.html#l00761">applyMultiVarPhaseFunc()</a>, <a class="el" href="QuEST_8c_source.html#l00778">applyMultiVarPhaseFuncOverrides()</a>, <a class="el" href="QuEST_8c_source.html#l00796">applyNamedPhaseFunc()</a>, <a class="el" href="QuEST_8c_source.html#l00813">applyNamedPhaseFuncOverrides()</a>, <a class="el" href="QuEST_8c_source.html#l00831">applyParamNamedPhaseFunc()</a>, and <a class="el" href="QuEST_8c_source.html#l00848">applyParamNamedPhaseFuncOverrides()</a>.</p>
</div>
</div>
<a id="a27294e3065ebe42a65b3b9e0f85551dd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a27294e3065ebe42a65b3b9e0f85551dd">◆ </a></span>statevec_applyDiagonalOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_applyDiagonalOp </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="structDiagonalOp.html">DiagonalOp</a> </td>
<td class="paramname"><em>op</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#l04047">4047</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="l04047"></a><span class="lineno"> 4047</span>  {</div>
<div class="line"><a name="l04048"></a><span class="lineno"> 4048</span>  </div>
<div class="line"><a name="l04049"></a><span class="lineno"> 4049</span>  <span class="comment">// each node/chunk modifies only its values in an embarrassingly parallelisable way</span></div>
<div class="line"><a name="l04050"></a><span class="lineno"> 4050</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> numAmps = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l04051"></a><span class="lineno"> 4051</span>  </div>
<div class="line"><a name="l04052"></a><span class="lineno"> 4052</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* stateRe = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l04053"></a><span class="lineno"> 4053</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* stateIm = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l04054"></a><span class="lineno"> 4054</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* opRe = op.<a class="code" href="structDiagonalOp.html#a1d66088bed235d524cd452b107694d5c">real</a>;</div>
<div class="line"><a name="l04055"></a><span class="lineno"> 4055</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* opIm = op.<a class="code" href="structDiagonalOp.html#a85c3f52533efe831bbe40b9a48602388">imag</a>;</div>
<div class="line"><a name="l04056"></a><span class="lineno"> 4056</span>  </div>
<div class="line"><a name="l04057"></a><span class="lineno"> 4057</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> a,b,c,d;</div>
<div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l04059"></a><span class="lineno"> 4059</span>  </div>
<div class="line"><a name="l04060"></a><span class="lineno"> 4060</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l04061"></a><span class="lineno"> 4061</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l04062"></a><span class="lineno"> 4062</span> <span class="preprocessor"> shared (stateRe,stateIm, opRe,opIm, numAmps) \</span></div>
<div class="line"><a name="l04063"></a><span class="lineno"> 4063</span> <span class="preprocessor"> private (index, a,b,c,d)</span></div>
<div class="line"><a name="l04064"></a><span class="lineno"> 4064</span> <span class="preprocessor"># endif </span></div>
<div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>  {</div>
<div class="line"><a name="l04066"></a><span class="lineno"> 4066</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l04067"></a><span class="lineno"> 4067</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l04068"></a><span class="lineno"> 4068</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>  <span class="keywordflow">for</span> (index=0LL; index<numAmps; index++) {</div>
<div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>  a = stateRe[index];</div>
<div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>  b = stateIm[index];</div>
<div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>  c = opRe[index];</div>
<div class="line"><a name="l04073"></a><span class="lineno"> 4073</span>  d = opIm[index];</div>
<div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>  </div>
<div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>  <span class="comment">// (a + b i)(c + d i) = (a c - b d) + i (a d + b c)</span></div>
<div class="line"><a name="l04076"></a><span class="lineno"> 4076</span>  stateRe[index] = a*c - b*d;</div>
<div class="line"><a name="l04077"></a><span class="lineno"> 4077</span>  stateIm[index] = a*d + b*c;</div>
<div class="line"><a name="l04078"></a><span class="lineno"> 4078</span>  }</div>
<div class="line"><a name="l04079"></a><span class="lineno"> 4079</span>  }</div>
<div class="line"><a name="l04080"></a><span class="lineno"> 4080</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00310">DiagonalOp::imag</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00308">DiagonalOp::real</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01127">applyDiagonalOp()</a>.</p>
</div>
</div>
<a id="ab33437d10c1ce1c4b034c7c411db553f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab33437d10c1ce1c4b034c7c411db553f">◆ </a></span>statevec_applyMultiVarPhaseFuncOverrides()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_applyMultiVarPhaseFuncOverrides </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>qubits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>numQubitsPerReg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numRegs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum <a class="el" href="group__type.html#ga9c91c41aa42ae537995e89ffc616afe1">bitEncoding</a> </td>
<td class="paramname"><em>encoding</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>coeffs</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>exponents</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>numTermsPerReg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int * </td>
<td class="paramname"><em>overrideInds</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>overridePhases</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numOverrides</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>conj</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#l04345">4345</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="l04350"></a><span class="lineno"> 4350</span> {</div>
<div class="line"><a name="l04351"></a><span class="lineno"> 4351</span>  <span class="comment">// each node/chunk modifies only local values in an embarrassingly parallel way </span></div>
<div class="line"><a name="l04352"></a><span class="lineno"> 4352</span>  </div>
<div class="line"><a name="l04353"></a><span class="lineno"> 4353</span>  <span class="comment">// note partitions of qubits, coeffs, exponents and overrideInds are stored flat</span></div>
<div class="line"><a name="l04354"></a><span class="lineno"> 4354</span>  </div>
<div class="line"><a name="l04355"></a><span class="lineno"> 4355</span>  <span class="comment">// thread-shared vaes</span></div>
<div class="line"><a name="l04356"></a><span class="lineno"> 4356</span>  <span class="keywordtype">int</span> chunkId = qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>;</div>
<div class="line"><a name="l04357"></a><span class="lineno"> 4357</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> numAmps = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l04358"></a><span class="lineno"> 4358</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* stateRe = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l04359"></a><span class="lineno"> 4359</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* stateIm = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l04360"></a><span class="lineno"> 4360</span>  </div>
<div class="line"><a name="l04361"></a><span class="lineno"> 4361</span>  <span class="comment">// thread-private vars</span></div>
<div class="line"><a name="l04362"></a><span class="lineno"> 4362</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index, globalAmpInd;</div>
<div class="line"><a name="l04363"></a><span class="lineno"> 4363</span>  <span class="keywordtype">int</span> r, q, i, t, found, flatInd;</div>
<div class="line"><a name="l04364"></a><span class="lineno"> 4364</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> phase, c, s, re, im;</div>
<div class="line"><a name="l04365"></a><span class="lineno"> 4365</span>  </div>
<div class="line"><a name="l04366"></a><span class="lineno"> 4366</span>  <span class="comment">// each thread has a private static array of length >= numRegs (private var-length is illegal)</span></div>
<div class="line"><a name="l04367"></a><span class="lineno"> 4367</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> phaseInds[<a class="code" href="QuEST__precision_8h.html#a6698ce2a3971003a0a0289e5980d39c5">MAX_NUM_REGS_APPLY_ARBITRARY_PHASE</a>];</div>
<div class="line"><a name="l04368"></a><span class="lineno"> 4368</span>  </div>
<div class="line"><a name="l04369"></a><span class="lineno"> 4369</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l04370"></a><span class="lineno"> 4370</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l04371"></a><span class="lineno"> 4371</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l04372"></a><span class="lineno"> 4372</span> <span class="preprocessor"> shared (chunkId,numAmps, stateRe,stateIm, qubits,numQubitsPerReg,numRegs,encoding, coeffs,exponents,numTermsPerReg, overrideInds,overridePhases,numOverrides, conj) \</span></div>
<div class="line"><a name="l04373"></a><span class="lineno"> 4373</span> <span class="preprocessor"> private (index,globalAmpInd, r,q,i,t,flatInd, found, phaseInds,phase, c,s,re,im) </span></div>
<div class="line"><a name="l04374"></a><span class="lineno"> 4374</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l04375"></a><span class="lineno"> 4375</span>  {</div>
<div class="line"><a name="l04376"></a><span class="lineno"> 4376</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l04377"></a><span class="lineno"> 4377</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l04378"></a><span class="lineno"> 4378</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l04379"></a><span class="lineno"> 4379</span>  <span class="keywordflow">for</span> (index=0LL; index<numAmps; index++) {</div>
<div class="line"><a name="l04380"></a><span class="lineno"> 4380</span>  </div>
<div class="line"><a name="l04381"></a><span class="lineno"> 4381</span>  <span class="comment">// determine global amplitude index </span></div>
<div class="line"><a name="l04382"></a><span class="lineno"> 4382</span>  globalAmpInd = chunkId * numAmps + index;</div>
<div class="line"><a name="l04383"></a><span class="lineno"> 4383</span>  </div>
<div class="line"><a name="l04384"></a><span class="lineno"> 4384</span>  <span class="comment">// determine phase indices</span></div>
<div class="line"><a name="l04385"></a><span class="lineno"> 4385</span>  flatInd = 0;</div>
<div class="line"><a name="l04386"></a><span class="lineno"> 4386</span>  <span class="keywordflow">for</span> (r=0; r<numRegs; r++) {</div>
<div class="line"><a name="l04387"></a><span class="lineno"> 4387</span>  phaseInds[r] = 0LL;</div>
<div class="line"><a name="l04388"></a><span class="lineno"> 4388</span>  </div>
<div class="line"><a name="l04389"></a><span class="lineno"> 4389</span>  <span class="keywordflow">if</span> (encoding == <a class="code" href="group__type.html#gga9c91c41aa42ae537995e89ffc616afe1a7165f9a47792f47c718ca128556fb3ae">UNSIGNED</a>) {</div>
<div class="line"><a name="l04390"></a><span class="lineno"> 4390</span>  <span class="keywordflow">for</span> (q=0; q<numQubitsPerReg[r]; q++)</div>
<div class="line"><a name="l04391"></a><span class="lineno"> 4391</span>  phaseInds[r] += (1LL << q) * <a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a>(qubits[flatInd++], globalAmpInd); <span class="comment">// qubits[flatInd] ~ qubits[r][q]</span></div>
<div class="line"><a name="l04392"></a><span class="lineno"> 4392</span>  }</div>
<div class="line"><a name="l04393"></a><span class="lineno"> 4393</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (encoding == <a class="code" href="group__type.html#gga9c91c41aa42ae537995e89ffc616afe1a9aa2a35d92976c7de970506c4d19a96c">TWOS_COMPLEMENT</a>) {</div>
<div class="line"><a name="l04394"></a><span class="lineno"> 4394</span>  <span class="keywordflow">for</span> (q=0; q<numQubitsPerReg[r]-1; q++) </div>
<div class="line"><a name="l04395"></a><span class="lineno"> 4395</span>  phaseInds[r] += (1LL << q) * <a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a>(qubits[flatInd++], globalAmpInd);</div>
<div class="line"><a name="l04396"></a><span class="lineno"> 4396</span>  <span class="comment">// use final qubit to indicate sign</span></div>
<div class="line"><a name="l04397"></a><span class="lineno"> 4397</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a>(qubits[flatInd++], globalAmpInd) == 1)</div>
<div class="line"><a name="l04398"></a><span class="lineno"> 4398</span>  phaseInds[r] -= (1LL << (numQubitsPerReg[r]-1));</div>
<div class="line"><a name="l04399"></a><span class="lineno"> 4399</span>  }</div>
<div class="line"><a name="l04400"></a><span class="lineno"> 4400</span>  }</div>
<div class="line"><a name="l04401"></a><span class="lineno"> 4401</span>  </div>
<div class="line"><a name="l04402"></a><span class="lineno"> 4402</span>  <span class="comment">// determine if this phase index has an overriden value (i < numOverrides)</span></div>
<div class="line"><a name="l04403"></a><span class="lineno"> 4403</span>  <span class="keywordflow">for</span> (i=0; i<numOverrides; i++) {</div>
<div class="line"><a name="l04404"></a><span class="lineno"> 4404</span>  found = 1;</div>
<div class="line"><a name="l04405"></a><span class="lineno"> 4405</span>  <span class="keywordflow">for</span> (r=0; r<numRegs; r++) {</div>
<div class="line"><a name="l04406"></a><span class="lineno"> 4406</span>  <span class="keywordflow">if</span> (phaseInds[r] != overrideInds[i*numRegs+r]) {</div>
<div class="line"><a name="l04407"></a><span class="lineno"> 4407</span>  found = 0;</div>
<div class="line"><a name="l04408"></a><span class="lineno"> 4408</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l04409"></a><span class="lineno"> 4409</span>  }</div>
<div class="line"><a name="l04410"></a><span class="lineno"> 4410</span>  }</div>
<div class="line"><a name="l04411"></a><span class="lineno"> 4411</span>  <span class="keywordflow">if</span> (found)</div>
<div class="line"><a name="l04412"></a><span class="lineno"> 4412</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l04413"></a><span class="lineno"> 4413</span>  }</div>
<div class="line"><a name="l04414"></a><span class="lineno"> 4414</span>  </div>
<div class="line"><a name="l04415"></a><span class="lineno"> 4415</span>  <span class="comment">// compute the phase (unless overriden)</span></div>
<div class="line"><a name="l04416"></a><span class="lineno"> 4416</span>  phase = 0;</div>
<div class="line"><a name="l04417"></a><span class="lineno"> 4417</span>  <span class="keywordflow">if</span> (i < numOverrides)</div>
<div class="line"><a name="l04418"></a><span class="lineno"> 4418</span>  phase = overridePhases[i];</div>
<div class="line"><a name="l04419"></a><span class="lineno"> 4419</span>  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l04420"></a><span class="lineno"> 4420</span>  flatInd = 0;</div>
<div class="line"><a name="l04421"></a><span class="lineno"> 4421</span>  <span class="keywordflow">for</span> (r=0; r<numRegs; r++) {</div>
<div class="line"><a name="l04422"></a><span class="lineno"> 4422</span>  <span class="keywordflow">for</span> (t=0; t<numTermsPerReg[r]; t++) {</div>
<div class="line"><a name="l04423"></a><span class="lineno"> 4423</span>  phase += coeffs[flatInd] * pow(phaseInds[r], exponents[flatInd]);</div>
<div class="line"><a name="l04424"></a><span class="lineno"> 4424</span>  flatInd++;</div>
<div class="line"><a name="l04425"></a><span class="lineno"> 4425</span>  }</div>
<div class="line"><a name="l04426"></a><span class="lineno"> 4426</span>  }</div>
<div class="line"><a name="l04427"></a><span class="lineno"> 4427</span>  }</div>
<div class="line"><a name="l04428"></a><span class="lineno"> 4428</span>  </div>
<div class="line"><a name="l04429"></a><span class="lineno"> 4429</span>  <span class="comment">// negate phase to conjugate operator </span></div>
<div class="line"><a name="l04430"></a><span class="lineno"> 4430</span>  <span class="keywordflow">if</span> (conj)</div>
<div class="line"><a name="l04431"></a><span class="lineno"> 4431</span>  phase *= -1;</div>
<div class="line"><a name="l04432"></a><span class="lineno"> 4432</span>  </div>
<div class="line"><a name="l04433"></a><span class="lineno"> 4433</span>  <span class="comment">// modify amp to amp * exp(i phase) </span></div>
<div class="line"><a name="l04434"></a><span class="lineno"> 4434</span>  c = cos(phase);</div>
<div class="line"><a name="l04435"></a><span class="lineno"> 4435</span>  s = sin(phase);</div>
<div class="line"><a name="l04436"></a><span class="lineno"> 4436</span>  re = stateRe[index];</div>
<div class="line"><a name="l04437"></a><span class="lineno"> 4437</span>  im = stateIm[index];</div>
<div class="line"><a name="l04438"></a><span class="lineno"> 4438</span>  </div>
<div class="line"><a name="l04439"></a><span class="lineno"> 4439</span>  <span class="comment">// = {re[amp] cos(phase) - im[amp] sin(phase)} + i {re[amp] sin(phase) + im[amp] cos(phase)}</span></div>
<div class="line"><a name="l04440"></a><span class="lineno"> 4440</span>  stateRe[index] = re*c - im*s;</div>
<div class="line"><a name="l04441"></a><span class="lineno"> 4441</span>  stateIm[index] = re*s + im*c;</div>
<div class="line"><a name="l04442"></a><span class="lineno"> 4442</span>  }</div>
<div class="line"><a name="l04443"></a><span class="lineno"> 4443</span>  }</div>
<div class="line"><a name="l04444"></a><span class="lineno"> 4444</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00082">extractBit()</a>, <a class="el" href="QuEST__precision_8h_source.html#l00072">MAX_NUM_REGS_APPLY_ARBITRARY_PHASE</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST_8h_source.html#l00269">TWOS_COMPLEMENT</a>, and <a class="el" href="QuEST_8h_source.html#l00269">UNSIGNED</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00761">applyMultiVarPhaseFunc()</a>, and <a class="el" href="QuEST_8c_source.html#l00778">applyMultiVarPhaseFuncOverrides()</a>.</p>
</div>
</div>
<a id="a7d8a817207847d2646a52044a63fd469"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7d8a817207847d2646a52044a63fd469">◆ </a></span>statevec_applyParamNamedPhaseFuncOverrides()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_applyParamNamedPhaseFuncOverrides </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>qubits</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>numQubitsPerReg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numRegs</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum <a class="el" href="group__type.html#ga9c91c41aa42ae537995e89ffc616afe1">bitEncoding</a> </td>
<td class="paramname"><em>encoding</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">enum <a class="el" href="group__type.html#gaa7d869b117ba5024d6b84938e8cdfc65">phaseFunc</a> </td>
<td class="paramname"><em>functionNameCode</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>params</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numParams</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int * </td>
<td class="paramname"><em>overrideInds</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>overridePhases</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numOverrides</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>conj</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#l04446">4446</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="l04452"></a><span class="lineno"> 4452</span>  {</div>
<div class="line"><a name="l04453"></a><span class="lineno"> 4453</span>  <span class="comment">// each node/chunk modifies only local values in an embarrassingly parallel way </span></div>
<div class="line"><a name="l04454"></a><span class="lineno"> 4454</span>  </div>
<div class="line"><a name="l04455"></a><span class="lineno"> 4455</span>  <span class="comment">// note partitions of qubits, overrideInds are stored flat</span></div>
<div class="line"><a name="l04456"></a><span class="lineno"> 4456</span>  </div>
<div class="line"><a name="l04457"></a><span class="lineno"> 4457</span>  <span class="comment">// thread-shared vaes</span></div>
<div class="line"><a name="l04458"></a><span class="lineno"> 4458</span>  <span class="keywordtype">int</span> chunkId = qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>;</div>
<div class="line"><a name="l04459"></a><span class="lineno"> 4459</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> numAmps = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l04460"></a><span class="lineno"> 4460</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* stateRe = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l04461"></a><span class="lineno"> 4461</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* stateIm = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l04462"></a><span class="lineno"> 4462</span>  </div>
<div class="line"><a name="l04463"></a><span class="lineno"> 4463</span>  <span class="comment">// thread-private vars</span></div>
<div class="line"><a name="l04464"></a><span class="lineno"> 4464</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index, globalAmpInd;</div>
<div class="line"><a name="l04465"></a><span class="lineno"> 4465</span>  <span class="keywordtype">int</span> r, q, i, found, flatInd;</div>
<div class="line"><a name="l04466"></a><span class="lineno"> 4466</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> phase, norm, prod, dist, c, s, re, im;</div>
<div class="line"><a name="l04467"></a><span class="lineno"> 4467</span>  </div>
<div class="line"><a name="l04468"></a><span class="lineno"> 4468</span>  <span class="comment">// each thread has a private static array of length >= numRegs (private var-length is illegal)</span></div>
<div class="line"><a name="l04469"></a><span class="lineno"> 4469</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> phaseInds[<a class="code" href="QuEST__precision_8h.html#a6698ce2a3971003a0a0289e5980d39c5">MAX_NUM_REGS_APPLY_ARBITRARY_PHASE</a>];</div>
<div class="line"><a name="l04470"></a><span class="lineno"> 4470</span>  </div>
<div class="line"><a name="l04471"></a><span class="lineno"> 4471</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l04472"></a><span class="lineno"> 4472</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l04473"></a><span class="lineno"> 4473</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l04474"></a><span class="lineno"> 4474</span> <span class="preprocessor"> shared (chunkId,numAmps, stateRe,stateIm, qubits,numQubitsPerReg,numRegs,encoding, phaseFuncName,params,numParams, overrideInds,overridePhases,numOverrides, conj) \</span></div>
<div class="line"><a name="l04475"></a><span class="lineno"> 4475</span> <span class="preprocessor"> private (index,globalAmpInd, r,q,i,flatInd, found, phaseInds,phase,norm,prod,dist, c,s,re,im) </span></div>
<div class="line"><a name="l04476"></a><span class="lineno"> 4476</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l04477"></a><span class="lineno"> 4477</span>  {</div>
<div class="line"><a name="l04478"></a><span class="lineno"> 4478</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l04479"></a><span class="lineno"> 4479</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l04480"></a><span class="lineno"> 4480</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l04481"></a><span class="lineno"> 4481</span>  <span class="keywordflow">for</span> (index=0LL; index<numAmps; index++) {</div>
<div class="line"><a name="l04482"></a><span class="lineno"> 4482</span>  </div>
<div class="line"><a name="l04483"></a><span class="lineno"> 4483</span>  <span class="comment">// determine global amplitude index </span></div>
<div class="line"><a name="l04484"></a><span class="lineno"> 4484</span>  globalAmpInd = chunkId * numAmps + index;</div>
<div class="line"><a name="l04485"></a><span class="lineno"> 4485</span>  </div>
<div class="line"><a name="l04486"></a><span class="lineno"> 4486</span>  <span class="comment">// determine phase indices</span></div>
<div class="line"><a name="l04487"></a><span class="lineno"> 4487</span>  flatInd = 0;</div>
<div class="line"><a name="l04488"></a><span class="lineno"> 4488</span>  <span class="keywordflow">for</span> (r=0; r<numRegs; r++) {</div>
<div class="line"><a name="l04489"></a><span class="lineno"> 4489</span>  phaseInds[r] = 0LL;</div>
<div class="line"><a name="l04490"></a><span class="lineno"> 4490</span>  </div>
<div class="line"><a name="l04491"></a><span class="lineno"> 4491</span>  <span class="keywordflow">if</span> (encoding == <a class="code" href="group__type.html#gga9c91c41aa42ae537995e89ffc616afe1a7165f9a47792f47c718ca128556fb3ae">UNSIGNED</a>) {</div>
<div class="line"><a name="l04492"></a><span class="lineno"> 4492</span>  <span class="keywordflow">for</span> (q=0; q<numQubitsPerReg[r]; q++)</div>
<div class="line"><a name="l04493"></a><span class="lineno"> 4493</span>  phaseInds[r] += (1LL << q) * <a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a>(qubits[flatInd++], globalAmpInd); <span class="comment">// qubits[flatInd] ~ qubits[r][q]</span></div>
<div class="line"><a name="l04494"></a><span class="lineno"> 4494</span>  }</div>
<div class="line"><a name="l04495"></a><span class="lineno"> 4495</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (encoding == <a class="code" href="group__type.html#gga9c91c41aa42ae537995e89ffc616afe1a9aa2a35d92976c7de970506c4d19a96c">TWOS_COMPLEMENT</a>) {</div>
<div class="line"><a name="l04496"></a><span class="lineno"> 4496</span>  <span class="keywordflow">for</span> (q=0; q<numQubitsPerReg[r]-1; q++) </div>
<div class="line"><a name="l04497"></a><span class="lineno"> 4497</span>  phaseInds[r] += (1LL << q) * <a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a>(qubits[flatInd++], globalAmpInd);</div>
<div class="line"><a name="l04498"></a><span class="lineno"> 4498</span>  <span class="comment">// use final qubit to indicate sign</span></div>
<div class="line"><a name="l04499"></a><span class="lineno"> 4499</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a>(qubits[flatInd++], globalAmpInd) == 1)</div>
<div class="line"><a name="l04500"></a><span class="lineno"> 4500</span>  phaseInds[r] -= (1LL << (numQubitsPerReg[r]-1));</div>
<div class="line"><a name="l04501"></a><span class="lineno"> 4501</span>  }</div>
<div class="line"><a name="l04502"></a><span class="lineno"> 4502</span>  }</div>
<div class="line"><a name="l04503"></a><span class="lineno"> 4503</span>  </div>
<div class="line"><a name="l04504"></a><span class="lineno"> 4504</span>  <span class="comment">// determine if this phase index has an overriden value (i < numOverrides)</span></div>
<div class="line"><a name="l04505"></a><span class="lineno"> 4505</span>  <span class="keywordflow">for</span> (i=0; i<numOverrides; i++) {</div>
<div class="line"><a name="l04506"></a><span class="lineno"> 4506</span>  found = 1;</div>
<div class="line"><a name="l04507"></a><span class="lineno"> 4507</span>  <span class="keywordflow">for</span> (r=0; r<numRegs; r++) {</div>
<div class="line"><a name="l04508"></a><span class="lineno"> 4508</span>  <span class="keywordflow">if</span> (phaseInds[r] != overrideInds[i*numRegs+r]) {</div>
<div class="line"><a name="l04509"></a><span class="lineno"> 4509</span>  found = 0;</div>
<div class="line"><a name="l04510"></a><span class="lineno"> 4510</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l04511"></a><span class="lineno"> 4511</span>  }</div>
<div class="line"><a name="l04512"></a><span class="lineno"> 4512</span>  }</div>
<div class="line"><a name="l04513"></a><span class="lineno"> 4513</span>  <span class="keywordflow">if</span> (found)</div>
<div class="line"><a name="l04514"></a><span class="lineno"> 4514</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l04515"></a><span class="lineno"> 4515</span>  }</div>
<div class="line"><a name="l04516"></a><span class="lineno"> 4516</span>  </div>
<div class="line"><a name="l04517"></a><span class="lineno"> 4517</span>  <span class="comment">// compute the phase (unless overriden)</span></div>
<div class="line"><a name="l04518"></a><span class="lineno"> 4518</span>  phase = 0;</div>
<div class="line"><a name="l04519"></a><span class="lineno"> 4519</span>  <span class="keywordflow">if</span> (i < numOverrides)</div>
<div class="line"><a name="l04520"></a><span class="lineno"> 4520</span>  phase = overridePhases[i];</div>
<div class="line"><a name="l04521"></a><span class="lineno"> 4521</span>  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l04522"></a><span class="lineno"> 4522</span>  <span class="comment">// compute norm related phases</span></div>
<div class="line"><a name="l04523"></a><span class="lineno"> 4523</span>  <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ae003ec1158e3a4e295616ced12af154e">NORM</a> || phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ad4c32e295c08ebe224e2c5ba6497f043">INVERSE_NORM</a> ||</div>
<div class="line"><a name="l04524"></a><span class="lineno"> 4524</span>  phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a93c0c1e166dd43c6a57f61e5490808e1">SCALED_NORM</a> || phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ae8c96906c1ec109d295c491e572d01e2">SCALED_INVERSE_NORM</a> ||</div>
<div class="line"><a name="l04525"></a><span class="lineno"> 4525</span>  phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65aa318172feec5b530e9a7849f2f7b44e7">SCALED_INVERSE_SHIFTED_NORM</a>) {</div>
<div class="line"><a name="l04526"></a><span class="lineno"> 4526</span>  </div>
<div class="line"><a name="l04527"></a><span class="lineno"> 4527</span>  norm = 0;</div>
<div class="line"><a name="l04528"></a><span class="lineno"> 4528</span>  <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65aa318172feec5b530e9a7849f2f7b44e7">SCALED_INVERSE_SHIFTED_NORM</a>) {</div>
<div class="line"><a name="l04529"></a><span class="lineno"> 4529</span>  <span class="keywordflow">for</span> (r=0; r<numRegs; r++)</div>
<div class="line"><a name="l04530"></a><span class="lineno"> 4530</span>  norm += (phaseInds[r] - params[2+r])*(phaseInds[r] - params[2+r]);</div>
<div class="line"><a name="l04531"></a><span class="lineno"> 4531</span>  }</div>
<div class="line"><a name="l04532"></a><span class="lineno"> 4532</span>  <span class="keywordflow">else</span></div>
<div class="line"><a name="l04533"></a><span class="lineno"> 4533</span>  <span class="keywordflow">for</span> (r=0; r<numRegs; r++)</div>
<div class="line"><a name="l04534"></a><span class="lineno"> 4534</span>  norm += phaseInds[r]*phaseInds[r];</div>
<div class="line"><a name="l04535"></a><span class="lineno"> 4535</span>  norm = sqrt(norm);</div>
<div class="line"><a name="l04536"></a><span class="lineno"> 4536</span>  </div>
<div class="line"><a name="l04537"></a><span class="lineno"> 4537</span>  <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ae003ec1158e3a4e295616ced12af154e">NORM</a>)</div>
<div class="line"><a name="l04538"></a><span class="lineno"> 4538</span>  phase = norm;</div>
<div class="line"><a name="l04539"></a><span class="lineno"> 4539</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ad4c32e295c08ebe224e2c5ba6497f043">INVERSE_NORM</a>)</div>
<div class="line"><a name="l04540"></a><span class="lineno"> 4540</span>  phase = (norm == 0.)? params[0] : 1/norm; <span class="comment">// smallest non-zero norm is 1</span></div>
<div class="line"><a name="l04541"></a><span class="lineno"> 4541</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a93c0c1e166dd43c6a57f61e5490808e1">SCALED_NORM</a>)</div>
<div class="line"><a name="l04542"></a><span class="lineno"> 4542</span>  phase = params[0] * norm;</div>
<div class="line"><a name="l04543"></a><span class="lineno"> 4543</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ae8c96906c1ec109d295c491e572d01e2">SCALED_INVERSE_NORM</a> || phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65aa318172feec5b530e9a7849f2f7b44e7">SCALED_INVERSE_SHIFTED_NORM</a>)</div>
<div class="line"><a name="l04544"></a><span class="lineno"> 4544</span>  phase = (norm <= REAL_EPS)? params[1] : params[0] / norm; <span class="comment">// unless shifted closer to zero</span></div>
<div class="line"><a name="l04545"></a><span class="lineno"> 4545</span>  }</div>
<div class="line"><a name="l04546"></a><span class="lineno"> 4546</span>  <span class="comment">// compute product related phases</span></div>
<div class="line"><a name="l04547"></a><span class="lineno"> 4547</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65acb6911398e0068f545a31b82bcdef3e4">PRODUCT</a> || phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65acb26952815118f5ced7703302dbeb556">INVERSE_PRODUCT</a> ||</div>
<div class="line"><a name="l04548"></a><span class="lineno"> 4548</span>  phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a31a29a30f92fe34c35098f941adbbc93">SCALED_PRODUCT</a> || phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a1a5168576607f460d3e60f184575cacb">SCALED_INVERSE_PRODUCT</a>) {</div>
<div class="line"><a name="l04549"></a><span class="lineno"> 4549</span>  </div>
<div class="line"><a name="l04550"></a><span class="lineno"> 4550</span>  prod = 1;</div>
<div class="line"><a name="l04551"></a><span class="lineno"> 4551</span>  <span class="keywordflow">for</span> (r=0; r<numRegs; r++)</div>
<div class="line"><a name="l04552"></a><span class="lineno"> 4552</span>  prod *= phaseInds[r];</div>
<div class="line"><a name="l04553"></a><span class="lineno"> 4553</span>  </div>
<div class="line"><a name="l04554"></a><span class="lineno"> 4554</span>  <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65acb6911398e0068f545a31b82bcdef3e4">PRODUCT</a>)</div>
<div class="line"><a name="l04555"></a><span class="lineno"> 4555</span>  phase = prod;</div>
<div class="line"><a name="l04556"></a><span class="lineno"> 4556</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65acb26952815118f5ced7703302dbeb556">INVERSE_PRODUCT</a>)</div>
<div class="line"><a name="l04557"></a><span class="lineno"> 4557</span>  phase = (prod == 0.)? params[0] : 1/prod; <span class="comment">// smallest non-zero product norm is +- 1</span></div>
<div class="line"><a name="l04558"></a><span class="lineno"> 4558</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a31a29a30f92fe34c35098f941adbbc93">SCALED_PRODUCT</a>)</div>
<div class="line"><a name="l04559"></a><span class="lineno"> 4559</span>  phase = params[0] * prod;</div>
<div class="line"><a name="l04560"></a><span class="lineno"> 4560</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a1a5168576607f460d3e60f184575cacb">SCALED_INVERSE_PRODUCT</a>)</div>
<div class="line"><a name="l04561"></a><span class="lineno"> 4561</span>  phase = (prod == 0.)? params[1] : params[0] / prod;</div>
<div class="line"><a name="l04562"></a><span class="lineno"> 4562</span>  }</div>
<div class="line"><a name="l04563"></a><span class="lineno"> 4563</span>  <span class="comment">// compute Euclidean distance related phases </span></div>
<div class="line"><a name="l04564"></a><span class="lineno"> 4564</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a2ad72f168181763513d7793c13bf2a91">DISTANCE</a> || phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a6313e6ff48163c11c47866c4fda4bfa0">INVERSE_DISTANCE</a> ||</div>
<div class="line"><a name="l04565"></a><span class="lineno"> 4565</span>  phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ace23d4b924240a245d83193f0ce398d4">SCALED_DISTANCE</a> || phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ae5114537389194302c7a619e35e6e227">SCALED_INVERSE_DISTANCE</a> ||</div>
<div class="line"><a name="l04566"></a><span class="lineno"> 4566</span>  phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a39111120b79016d6b3e773b711fa63f7">SCALED_INVERSE_SHIFTED_DISTANCE</a>) {</div>
<div class="line"><a name="l04567"></a><span class="lineno"> 4567</span>  </div>
<div class="line"><a name="l04568"></a><span class="lineno"> 4568</span>  dist = 0;</div>
<div class="line"><a name="l04569"></a><span class="lineno"> 4569</span>  <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a39111120b79016d6b3e773b711fa63f7">SCALED_INVERSE_SHIFTED_DISTANCE</a>) {</div>
<div class="line"><a name="l04570"></a><span class="lineno"> 4570</span>  <span class="keywordflow">for</span> (r=0; r<numRegs; r+=2)</div>
<div class="line"><a name="l04571"></a><span class="lineno"> 4571</span>  dist += (phaseInds[r] - phaseInds[r+1] - params[2+r/2])*(phaseInds[r] - phaseInds[r+1] - params[2+r/2]);</div>
<div class="line"><a name="l04572"></a><span class="lineno"> 4572</span>  }</div>
<div class="line"><a name="l04573"></a><span class="lineno"> 4573</span>  <span class="keywordflow">else</span></div>
<div class="line"><a name="l04574"></a><span class="lineno"> 4574</span>  <span class="keywordflow">for</span> (r=0; r<numRegs; r+=2)</div>
<div class="line"><a name="l04575"></a><span class="lineno"> 4575</span>  dist += (phaseInds[r+1] - phaseInds[r])*(phaseInds[r+1] - phaseInds[r]);</div>
<div class="line"><a name="l04576"></a><span class="lineno"> 4576</span>  dist = sqrt(dist);</div>
<div class="line"><a name="l04577"></a><span class="lineno"> 4577</span>  </div>
<div class="line"><a name="l04578"></a><span class="lineno"> 4578</span>  <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a2ad72f168181763513d7793c13bf2a91">DISTANCE</a>)</div>
<div class="line"><a name="l04579"></a><span class="lineno"> 4579</span>  phase = dist;</div>
<div class="line"><a name="l04580"></a><span class="lineno"> 4580</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a6313e6ff48163c11c47866c4fda4bfa0">INVERSE_DISTANCE</a>)</div>
<div class="line"><a name="l04581"></a><span class="lineno"> 4581</span>  phase = (dist == 0.)? params[0] : 1/dist; <span class="comment">// smallest non-zero dist is 1</span></div>
<div class="line"><a name="l04582"></a><span class="lineno"> 4582</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ace23d4b924240a245d83193f0ce398d4">SCALED_DISTANCE</a>)</div>
<div class="line"><a name="l04583"></a><span class="lineno"> 4583</span>  phase = params[0] * dist;</div>
<div class="line"><a name="l04584"></a><span class="lineno"> 4584</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ae5114537389194302c7a619e35e6e227">SCALED_INVERSE_DISTANCE</a> || phaseFuncName == <a class="code" href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a39111120b79016d6b3e773b711fa63f7">SCALED_INVERSE_SHIFTED_DISTANCE</a>)</div>
<div class="line"><a name="l04585"></a><span class="lineno"> 4585</span>  phase = (dist <= REAL_EPS)? params[1] : params[0] / dist; <span class="comment">// unless shifted closer to 0</span></div>
<div class="line"><a name="l04586"></a><span class="lineno"> 4586</span>  }</div>
<div class="line"><a name="l04587"></a><span class="lineno"> 4587</span>  }</div>
<div class="line"><a name="l04588"></a><span class="lineno"> 4588</span>  </div>
<div class="line"><a name="l04589"></a><span class="lineno"> 4589</span>  <span class="comment">// negate phase to conjugate operator </span></div>
<div class="line"><a name="l04590"></a><span class="lineno"> 4590</span>  <span class="keywordflow">if</span> (conj)</div>
<div class="line"><a name="l04591"></a><span class="lineno"> 4591</span>  phase *= -1;</div>
<div class="line"><a name="l04592"></a><span class="lineno"> 4592</span>  </div>
<div class="line"><a name="l04593"></a><span class="lineno"> 4593</span>  <span class="comment">// modify amp to amp * exp(i phase) </span></div>
<div class="line"><a name="l04594"></a><span class="lineno"> 4594</span>  c = cos(phase);</div>
<div class="line"><a name="l04595"></a><span class="lineno"> 4595</span>  s = sin(phase);</div>
<div class="line"><a name="l04596"></a><span class="lineno"> 4596</span>  re = stateRe[index];</div>
<div class="line"><a name="l04597"></a><span class="lineno"> 4597</span>  im = stateIm[index];</div>
<div class="line"><a name="l04598"></a><span class="lineno"> 4598</span>  </div>
<div class="line"><a name="l04599"></a><span class="lineno"> 4599</span>  <span class="comment">// = {re[amp] cos(phase) - im[amp] sin(phase)} + i {re[amp] sin(phase) + im[amp] cos(phase)}</span></div>
<div class="line"><a name="l04600"></a><span class="lineno"> 4600</span>  stateRe[index] = re*c - im*s;</div>
<div class="line"><a name="l04601"></a><span class="lineno"> 4601</span>  stateIm[index] = re*s + im*c;</div>
<div class="line"><a name="l04602"></a><span class="lineno"> 4602</span>  }</div>
<div class="line"><a name="l04603"></a><span class="lineno"> 4603</span>  }</div>
<div class="line"><a name="l04604"></a><span class="lineno"> 4604</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00234">DISTANCE</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00082">extractBit()</a>, <a class="el" href="QuEST_8h_source.html#l00234">INVERSE_DISTANCE</a>, <a class="el" href="QuEST_8h_source.html#l00232">INVERSE_NORM</a>, <a class="el" href="QuEST_8h_source.html#l00233">INVERSE_PRODUCT</a>, <a class="el" href="QuEST__precision_8h_source.html#l00072">MAX_NUM_REGS_APPLY_ARBITRARY_PHASE</a>, <a class="el" href="QuEST_8h_source.html#l00232">NORM</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00233">PRODUCT</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00234">SCALED_DISTANCE</a>, <a class="el" href="QuEST_8h_source.html#l00234">SCALED_INVERSE_DISTANCE</a>, <a class="el" href="QuEST_8h_source.html#l00232">SCALED_INVERSE_NORM</a>, <a class="el" href="QuEST_8h_source.html#l00233">SCALED_INVERSE_PRODUCT</a>, <a class="el" href="QuEST_8h_source.html#l00234">SCALED_INVERSE_SHIFTED_DISTANCE</a>, <a class="el" href="QuEST_8h_source.html#l00232">SCALED_INVERSE_SHIFTED_NORM</a>, <a class="el" href="QuEST_8h_source.html#l00232">SCALED_NORM</a>, <a class="el" href="QuEST_8h_source.html#l00233">SCALED_PRODUCT</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST_8h_source.html#l00269">TWOS_COMPLEMENT</a>, and <a class="el" href="QuEST_8h_source.html#l00269">UNSIGNED</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00849">agnostic_applyQFT()</a>, <a class="el" href="QuEST_8c_source.html#l00796">applyNamedPhaseFunc()</a>, <a class="el" href="QuEST_8c_source.html#l00813">applyNamedPhaseFuncOverrides()</a>, <a class="el" href="QuEST_8c_source.html#l00831">applyParamNamedPhaseFunc()</a>, and <a class="el" href="QuEST_8c_source.html#l00848">applyParamNamedPhaseFuncOverrides()</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#l00538">538</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="l00538"></a><span class="lineno"> 538</span>  {</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  </div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordtype">int</span> numQb = inQureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>;</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="keywordtype">int</span> targs[100]; <span class="comment">// [numQb];</span></div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> q=0; q < numQb; q++)</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  targs[q] = q;</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  </div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <a class="code" href="QuEST__internal_8h.html#a758bad4237ff0bf3b4ff5be626a982ae">statevec_initBlankState</a>(outQureg);</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  </div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t < numSumTerms; t++) {</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</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="l00549"></a><span class="lineno"> 549</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="l00550"></a><span class="lineno"> 550</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="l00551"></a><span class="lineno"> 551</span>  </div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="comment">// outQureg += coef paulis(inQureg)</span></div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</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="l00554"></a><span class="lineno"> 554</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="l00555"></a><span class="lineno"> 555</span>  </div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="comment">// undero paulis(inQureg), exploiting XX=YY=ZZ=I</span></div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</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="l00558"></a><span class="lineno"> 558</span>  }</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00327">Qureg::numQubitsRepresented</a>, <a class="el" href="QuEST_8h_source.html#l00105">Complex::real</a>, <a class="el" href="QuEST__common_8c_source.html#l00495">statevec_applyPauliProd()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l01464">statevec_initBlankState()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l04005">statevec_setWeightedQureg()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01059">applyPauliHamil()</a>, and <a class="el" href="QuEST_8c_source.html#l01048">applyPauliSum()</a>.</p>
</div>
</div>
<a id="a9d7928473aca695a614e9c24d903e578"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9d7928473aca695a614e9c24d903e578">◆ </a></span>statevec_applyPhaseFuncOverrides()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_applyPhaseFuncOverrides </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>qubits</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">enum <a class="el" href="group__type.html#ga9c91c41aa42ae537995e89ffc616afe1">bitEncoding</a> </td>
<td class="paramname"><em>encoding</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>coeffs</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>exponents</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numTerms</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">long long int * </td>
<td class="paramname"><em>overrideInds</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>overridePhases</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>numOverrides</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>conj</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#l04268">4268</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="l04273"></a><span class="lineno"> 4273</span> {</div>
<div class="line"><a name="l04274"></a><span class="lineno"> 4274</span>  <span class="comment">// each node/chunk modifies only local values in an embarrassingly parallel way </span></div>
<div class="line"><a name="l04275"></a><span class="lineno"> 4275</span>  </div>
<div class="line"><a name="l04276"></a><span class="lineno"> 4276</span>  <span class="comment">// thread shared vars</span></div>
<div class="line"><a name="l04277"></a><span class="lineno"> 4277</span>  <span class="keywordtype">int</span> chunkId = qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>;</div>
<div class="line"><a name="l04278"></a><span class="lineno"> 4278</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> numAmps = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l04279"></a><span class="lineno"> 4279</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* stateRe = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real;</div>
<div class="line"><a name="l04280"></a><span class="lineno"> 4280</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>* stateIm = qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag;</div>
<div class="line"><a name="l04281"></a><span class="lineno"> 4281</span>  </div>
<div class="line"><a name="l04282"></a><span class="lineno"> 4282</span>  <span class="comment">// thread private vars</span></div>
<div class="line"><a name="l04283"></a><span class="lineno"> 4283</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index, globalAmpInd, phaseInd;</div>
<div class="line"><a name="l04284"></a><span class="lineno"> 4284</span>  <span class="keywordtype">int</span> i, t, q;</div>
<div class="line"><a name="l04285"></a><span class="lineno"> 4285</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> phase, c, s, re, im;</div>
<div class="line"><a name="l04286"></a><span class="lineno"> 4286</span>  </div>
<div class="line"><a name="l04287"></a><span class="lineno"> 4287</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l04288"></a><span class="lineno"> 4288</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l04289"></a><span class="lineno"> 4289</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l04290"></a><span class="lineno"> 4290</span> <span class="preprocessor"> shared (chunkId,numAmps, stateRe,stateIm, qubits,numQubits,encoding, coeffs,exponents,numTerms, overrideInds,overridePhases,numOverrides, conj) \</span></div>
<div class="line"><a name="l04291"></a><span class="lineno"> 4291</span> <span class="preprocessor"> private (index, globalAmpInd, phaseInd, i,t,q, phase, c,s,re,im) </span></div>
<div class="line"><a name="l04292"></a><span class="lineno"> 4292</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l04293"></a><span class="lineno"> 4293</span>  {</div>
<div class="line"><a name="l04294"></a><span class="lineno"> 4294</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l04295"></a><span class="lineno"> 4295</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l04296"></a><span class="lineno"> 4296</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l04297"></a><span class="lineno"> 4297</span>  <span class="keywordflow">for</span> (index=0LL; index<numAmps; index++) {</div>
<div class="line"><a name="l04298"></a><span class="lineno"> 4298</span>  </div>
<div class="line"><a name="l04299"></a><span class="lineno"> 4299</span>  <span class="comment">// determine global amplitude index </span></div>
<div class="line"><a name="l04300"></a><span class="lineno"> 4300</span>  globalAmpInd = chunkId * numAmps + index;</div>
<div class="line"><a name="l04301"></a><span class="lineno"> 4301</span>  </div>
<div class="line"><a name="l04302"></a><span class="lineno"> 4302</span>  <span class="comment">// determine phase index of {qubits}</span></div>
<div class="line"><a name="l04303"></a><span class="lineno"> 4303</span>  phaseInd = 0LL;</div>
<div class="line"><a name="l04304"></a><span class="lineno"> 4304</span>  <span class="keywordflow">if</span> (encoding == <a class="code" href="group__type.html#gga9c91c41aa42ae537995e89ffc616afe1a7165f9a47792f47c718ca128556fb3ae">UNSIGNED</a>) {</div>
<div class="line"><a name="l04305"></a><span class="lineno"> 4305</span>  <span class="keywordflow">for</span> (q=0; q<numQubits; q++) <span class="comment">// use significance order specified by {qubits}</span></div>
<div class="line"><a name="l04306"></a><span class="lineno"> 4306</span>  phaseInd += (1LL << q) * <a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a>(qubits[q], globalAmpInd);</div>
<div class="line"><a name="l04307"></a><span class="lineno"> 4307</span>  } </div>
<div class="line"><a name="l04308"></a><span class="lineno"> 4308</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (encoding == <a class="code" href="group__type.html#gga9c91c41aa42ae537995e89ffc616afe1a9aa2a35d92976c7de970506c4d19a96c">TWOS_COMPLEMENT</a>) {</div>
<div class="line"><a name="l04309"></a><span class="lineno"> 4309</span>  <span class="keywordflow">for</span> (q=0; q<numQubits-1; q++) <span class="comment">// use final qubit to indicate sign </span></div>
<div class="line"><a name="l04310"></a><span class="lineno"> 4310</span>  phaseInd += (1LL << q) * <a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a>(qubits[q], globalAmpInd);</div>
<div class="line"><a name="l04311"></a><span class="lineno"> 4311</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a>(qubits[numQubits-1], globalAmpInd) == 1)</div>
<div class="line"><a name="l04312"></a><span class="lineno"> 4312</span>  phaseInd -= (1LL << (numQubits-1));</div>
<div class="line"><a name="l04313"></a><span class="lineno"> 4313</span>  }</div>
<div class="line"><a name="l04314"></a><span class="lineno"> 4314</span>  </div>
<div class="line"><a name="l04315"></a><span class="lineno"> 4315</span>  <span class="comment">// determine if this phase index has an overriden value (i < numOverrides)</span></div>
<div class="line"><a name="l04316"></a><span class="lineno"> 4316</span>  <span class="keywordflow">for</span> (i=0; i<numOverrides; i++)</div>
<div class="line"><a name="l04317"></a><span class="lineno"> 4317</span>  <span class="keywordflow">if</span> (phaseInd == overrideInds[i])</div>
<div class="line"><a name="l04318"></a><span class="lineno"> 4318</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l04319"></a><span class="lineno"> 4319</span>  </div>
<div class="line"><a name="l04320"></a><span class="lineno"> 4320</span>  <span class="comment">// determine phase from {coeffs}, {exponents} (unless overriden)</span></div>
<div class="line"><a name="l04321"></a><span class="lineno"> 4321</span>  phase = 0;</div>
<div class="line"><a name="l04322"></a><span class="lineno"> 4322</span>  <span class="keywordflow">if</span> (i < numOverrides)</div>
<div class="line"><a name="l04323"></a><span class="lineno"> 4323</span>  phase = overridePhases[i];</div>
<div class="line"><a name="l04324"></a><span class="lineno"> 4324</span>  <span class="keywordflow">else</span></div>
<div class="line"><a name="l04325"></a><span class="lineno"> 4325</span>  <span class="keywordflow">for</span> (t=0; t<numTerms; t++)</div>
<div class="line"><a name="l04326"></a><span class="lineno"> 4326</span>  phase += coeffs[t] * pow(phaseInd, exponents[t]);</div>
<div class="line"><a name="l04327"></a><span class="lineno"> 4327</span>  </div>
<div class="line"><a name="l04328"></a><span class="lineno"> 4328</span>  <span class="comment">// negate phase to conjugate operator </span></div>
<div class="line"><a name="l04329"></a><span class="lineno"> 4329</span>  <span class="keywordflow">if</span> (conj)</div>
<div class="line"><a name="l04330"></a><span class="lineno"> 4330</span>  phase *= -1;</div>
<div class="line"><a name="l04331"></a><span class="lineno"> 4331</span>  </div>
<div class="line"><a name="l04332"></a><span class="lineno"> 4332</span>  <span class="comment">// modify amp to amp * exp(i phase) </span></div>
<div class="line"><a name="l04333"></a><span class="lineno"> 4333</span>  c = cos(phase);</div>
<div class="line"><a name="l04334"></a><span class="lineno"> 4334</span>  s = sin(phase);</div>
<div class="line"><a name="l04335"></a><span class="lineno"> 4335</span>  re = stateRe[index];</div>
<div class="line"><a name="l04336"></a><span class="lineno"> 4336</span>  im = stateIm[index];</div>
<div class="line"><a name="l04337"></a><span class="lineno"> 4337</span>  </div>
<div class="line"><a name="l04338"></a><span class="lineno"> 4338</span>  <span class="comment">// = {re[amp] cos(phase) - im[amp] sin(phase)} + i {re[amp] sin(phase) + im[amp] cos(phase)}</span></div>
<div class="line"><a name="l04339"></a><span class="lineno"> 4339</span>  stateRe[index] = re*c - im*s;</div>
<div class="line"><a name="l04340"></a><span class="lineno"> 4340</span>  stateIm[index] = re*s + im*c;</div>
<div class="line"><a name="l04341"></a><span class="lineno"> 4341</span>  }</div>
<div class="line"><a name="l04342"></a><span class="lineno"> 4342</span>  }</div>
<div class="line"><a name="l04343"></a><span class="lineno"> 4343</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00082">extractBit()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST_8h_source.html#l00269">TWOS_COMPLEMENT</a>, and <a class="el" href="QuEST_8h_source.html#l00269">UNSIGNED</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00726">applyPhaseFunc()</a>, and <a class="el" href="QuEST_8c_source.html#l00743">applyPhaseFuncOverrides()</a>.</p>
</div>
</div>
<a id="a0fb948ddab4ca210e523aa3c52639df4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0fb948ddab4ca210e523aa3c52639df4">◆ </a></span>statevec_calcExpecDiagonalOp()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structComplex.html">Complex</a> statevec_calcExpecDiagonalOp </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="structDiagonalOp.html">DiagonalOp</a> </td>
<td class="paramname"><em>op</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#l01600">1600</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="l01600"></a><span class="lineno"> 1600</span>  {</div>
<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>  </div>
<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>  <a class="code" href="structComplex.html">Complex</a> localExpec = <a class="code" href="QuEST__cpu_8c.html#a16ccb485bcffb328bbd5b2af6977cead">statevec_calcExpecDiagonalOpLocal</a>(qureg, op);</div>
<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a> == 1)</div>
<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>  <span class="keywordflow">return</span> localExpec;</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>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> localReal = localExpec.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a>;</div>
<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> localImag = localExpec.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a>;</div>
<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> globalReal, globalImag;</div>
<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>  MPI_Allreduce(&localReal, &globalReal, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>  MPI_Allreduce(&localImag, &globalImag, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>  </div>
<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>  <a class="code" href="structComplex.html">Complex</a> globalExpec;</div>
<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>  globalExpec.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = globalReal;</div>
<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>  globalExpec.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = globalImag;</div>
<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>  <span class="keywordflow">return</span> globalExpec;</div>
<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l01951">copySharedReduceBlock()</a>, <a class="el" href="QuEST_8h_source.html#l00312">DiagonalOp::deviceOperator</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00348">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00338">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#l00348">Qureg::secondLevelReduction</a>, <a class="el" href="QuEST__cpu_8c_source.html#l04124">statevec_calcExpecDiagonalOpLocal()</a>, and <a class="el" href="QuEST__gpu_8cu_source.html#l02057">swapDouble()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01228">calcExpecDiagonalOp()</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#l00509">509</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="l00509"></a><span class="lineno"> 509</span>  {</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>  <a class="code" href="QuEST__internal_8h.html#aa4b77089145184d990848cd66993aa8b">statevec_cloneQureg</a>(workspace, qureg);</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>(workspace, targetQubits, pauliCodes, numTargets);</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>  <span class="comment">// compute the expected value</span></div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> value;</div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#acf78445e9435d09f44f0cc832c6aee79">isDensityMatrix</a>)</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</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="l00518"></a><span class="lineno"> 518</span>  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</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="l00520"></a><span class="lineno"> 520</span>  </div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keywordflow">return</span> value;</div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</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#l00325">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#l00495">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#l01572">statevec_cloneQureg()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01201">calcExpecPauliProd()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00524">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#l00524">524</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="l00524"></a><span class="lineno"> 524</span>  {</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  </div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordtype">int</span> numQb = qureg.<a class="code" href="structQureg.html#ad08dff5316b8937f4b2a1417591543dc">numQubitsRepresented</a>;</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keywordtype">int</span> targs[100]; <span class="comment">// [numQb];</span></div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> q=0; q < numQb; q++)</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  targs[q] = q;</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  </div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> value = 0;</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t < numSumTerms; t++)</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</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="l00534"></a><span class="lineno"> 534</span>  </div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keywordflow">return</span> value;</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00327">Qureg::numQubitsRepresented</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST__common_8c_source.html#l00509">statevec_calcExpecPauliProd()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01219">calcExpecPauliHamil()</a>, and <a class="el" href="QuEST_8c_source.html#l01210">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#l00380">380</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="l00380"></a><span class="lineno"> 380</span>  {</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  </div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</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="l00383"></a><span class="lineno"> 383</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="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">return</span> innerProdMag;</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</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#l01191">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. </p><dl class="todo"><dt><b><a class="el" href="todo.html#_todo000003">Todo:</a></b></dt><dd>could even do the kernel twice, storing real in bra.reduc and imag in ket.reduc? </dd></dl>
<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#l01951">copySharedReduceBlock()</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00348">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00106">Complex::imag</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00338">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#l00348">Qureg::secondLevelReduction</a>, <a class="el" href="QuEST__cpu_8c_source.html#l01082">statevec_calcInnerProductLocal()</a>, and <a class="el" href="QuEST__gpu_8cu_source.html#l02057">swapDouble()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01150">calcInnerProduct()</a>, <a class="el" href="QuEST__common_8c_source.html#l00509">statevec_calcExpecPauliProd()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00380">statevec_calcFidelity()</a>.</p>
</div>
</div>
<a id="a78cf98ea535790bc46069b60bae342c7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a78cf98ea535790bc46069b60bae342c7">◆ </a></span>statevec_calcProbOfAllOutcomes()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_calcProbOfAllOutcomes </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> * </td>
<td class="paramname"><em>retProbs</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>qureg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int * </td>
<td class="paramname"><em>qubits</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></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#l01340">1340</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="l01340"></a><span class="lineno"> 1340</span>  {</div>
<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  </div>
<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>  <span class="comment">// each node populates retProbs with contributions from the subset of amps in each</span></div>
<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  <a class="code" href="QuEST__cpu_8c.html#afb1e220c272754d0773aeccdb613b6b3">statevec_calcProbOfAllOutcomesLocal</a>(retProbs, qureg, qubits, numQubits);</div>
<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>  </div>
<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  <span class="comment">// then, retProbs are summed element-wise</span></div>
<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  MPI_Allreduce(MPI_IN_PLACE, retProbs, 1LL<<numQubits, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l03549">statevec_calcProbOfAllOutcomesLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01176">calcProbOfAllOutcomes()</a>.</p>
</div>
</div>
<a id="a63cb88a5f4eb12fef087435b8db3f8eb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a63cb88a5f4eb12fef087435b8db3f8eb">◆ </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">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#l01312">1312</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="l01313"></a><span class="lineno"> 1313</span> {</div>
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> stateProb=0, totalStateProb=0;</div>
<div class="line"><a name="l01315"></a><span class="lineno"> 1315</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="l01316"></a><span class="lineno"> 1316</span>  <span class="keywordflow">if</span> (skipValuesWithinRank) {</div>
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>  stateProb = <a class="code" href="QuEST__cpu_8c.html#a8535bc15c2ff249ddddb3fde6eff1490">statevec_findProbabilityOfZeroLocal</a>(qureg, measureQubit);</div>
<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01319"></a><span class="lineno"> 1319</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="l01320"></a><span class="lineno"> 1320</span>  stateProb = <a class="code" href="QuEST__cpu_8c.html#a430d98e35f1eae7f0815ac539057cf67">statevec_findProbabilityOfZeroDistributed</a>(qureg);</div>
<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  } <span class="keywordflow">else</span> stateProb = 0;</div>
<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>  }</div>
<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>  MPI_Allreduce(&stateProb, &totalStateProb, 1, MPI_QuEST_REAL, MPI_SUM, MPI_COMM_WORLD);</div>
<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>  <span class="keywordflow">if</span> (outcome==1) totalStateProb = 1.0 - totalStateProb;</div>
<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>  <span class="keywordflow">return</span> totalStateProb;</div>
<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01303">isChunkToSkipInFindPZero()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l02112">statevec_findProbabilityOfZero()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03513">statevec_findProbabilityOfZeroDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l03457">statevec_findProbabilityOfZeroLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01166">calcProbOfOutcome()</a>, <a class="el" href="QuEST_8c_source.html#l00966">collapseToOutcome()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00364">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#l00529">copyStateFromGPU()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00338">Qureg::numChunks</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01143">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#l01572">1572</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="l01572"></a><span class="lineno"> 1572</span>  {</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">// registers are equal sized, so nodes hold the same state-vector partitions</span></div>
<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>  </div>
<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>  stateVecSize = targetQureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>  </div>
<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01582"></a><span class="lineno"> 1582</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="l01583"></a><span class="lineno"> 1583</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="l01584"></a><span class="lineno"> 1584</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="l01585"></a><span class="lineno"> 1585</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="l01586"></a><span class="lineno"> 1586</span>  </div>
<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>  <span class="comment">// initialise the state to |0000..0000></span></div>
<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> <span class="preprocessor"> shared (stateVecSize, targetStateVecReal, targetStateVecImag, copyStateVecReal, copyStateVecImag) \</span></div>
<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>  {</div>
<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>  targetStateVecReal[index] = copyStateVecReal[index];</div>
<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>  targetStateVecImag[index] = copyStateVecImag[index];</div>
<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>  }</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> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00164">cloneQureg()</a>, <a class="el" href="QuEST_8c_source.html#l00064">createCloneQureg()</a>, <a class="el" href="QuEST_8c_source.html#l00145">initPureState()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00509">statevec_calcExpecPauliProd()</a>.</p>
</div>
</div>
<a id="a008becc4a18f868340836e0ab9fd6df6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a008becc4a18f868340836e0ab9fd6df6">◆ </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">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#l01368">1368</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="l01369"></a><span class="lineno"> 1369</span> {</div>
<div class="line"><a name="l01370"></a><span class="lineno"> 1370</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="l01371"></a><span class="lineno"> 1371</span>  <span class="keywordflow">if</span> (skipValuesWithinRank) {</div>
<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>  <a class="code" href="QuEST__cpu_8c.html#ab02bce0ebbb8f624e8ced8b09b99cdef">statevec_collapseToKnownProbOutcomeLocal</a>(qureg, measureQubit, outcome, totalStateProb);</div>
<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</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="l01375"></a><span class="lineno"> 1375</span>  <span class="comment">// chunk has amps for q=0</span></div>
<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>  <span class="keywordflow">if</span> (outcome==0) <a class="code" href="QuEST__cpu_8c.html#ad09bb76ad67581b03ab176832cca37cf">statevec_collapseToKnownProbOutcomeDistributedRenorm</a>(qureg, measureQubit, </div>
<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>  totalStateProb);</div>
<div class="line"><a name="l01378"></a><span class="lineno"> 1378</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="l01379"></a><span class="lineno"> 1379</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>  <span class="comment">// chunk has amps for q=1</span></div>
<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>  <span class="keywordflow">if</span> (outcome==1) <a class="code" href="QuEST__cpu_8c.html#ad09bb76ad67581b03ab176832cca37cf">statevec_collapseToKnownProbOutcomeDistributedRenorm</a>(qureg, measureQubit, </div>
<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>  totalStateProb);</div>
<div class="line"><a name="l01383"></a><span class="lineno"> 1383</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="l01384"></a><span class="lineno"> 1384</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> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01303">isChunkToSkipInFindPZero()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03849">statevec_collapseToKnownProbOutcomeDistributedRenorm()</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03767">statevec_collapseToKnownProbOutcomeLocal()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l03887">statevec_collapseToOutcomeDistributedSetZero()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00888">applyProjector()</a>, <a class="el" href="QuEST_8c_source.html#l00966">collapseToOutcome()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00364">statevec_measureWithStats()</a>.</p>
</div>
</div>
<a id="aec63559e8b9ab0e17efe18d64d2ceca6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aec63559e8b9ab0e17efe18d64d2ceca6">◆ </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">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#l00858">858</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="l00859"></a><span class="lineno"> 859</span> {</div>
<div class="line"><a name="l00860"></a><span class="lineno"> 860</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="l00861"></a><span class="lineno"> 861</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="l00862"></a><span class="lineno"> 862</span>  <a class="code" href="structComplex.html">Complex</a> rot1, rot2;</div>
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  </div>
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="keywordtype">int</span> rankIsUpper;</div>
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  </div>
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <a class="code" href="QuEST__cpu_8c.html#a5ddfdb22e4704b680d67d08d9e80835b">statevec_compactUnitaryLocal</a>(qureg, targetQubit, alpha, beta);</div>
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l00873"></a><span class="lineno"> 873</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="l00874"></a><span class="lineno"> 874</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#adb4b0373425b282abed27742d0ce0872">getRotAngle</a>(rankIsUpper, &rot1, &rot2, alpha, beta);</div>
<div class="line"><a name="l00875"></a><span class="lineno"> 875</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="l00876"></a><span class="lineno"> 876</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  </div>
<div class="line"><a name="l00879"></a><span class="lineno"> 879</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="l00880"></a><span class="lineno"> 880</span>  <span class="comment">// send values to compactUnitaryDistributed in the correct order</span></div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <a class="code" href="QuEST__cpu_8c.html#a0a7a35628b1c1eb47336deb9afda5b68">statevec_compactUnitaryDistributed</a>(qureg,rot1,rot2,</div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <a class="code" href="QuEST__cpu_8c.html#a0a7a35628b1c1eb47336deb9afda5b68">statevec_compactUnitaryDistributed</a>(qureg,rot1,rot2,</div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</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> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00241">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00493">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00317">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00272">getRotAngle()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02095">statevec_compactUnitaryDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l01754">statevec_compactUnitaryLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00404">compactUnitary()</a>, <a class="el" href="QuEST__common_8c_source.html#l00414">statevec_multiRotatePauli()</a>, <a class="el" href="QuEST__common_8c_source.html#l00314">statevec_rotateAroundAxis()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00321">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#l01741">1741</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="l01741"></a><span class="lineno"> 1741</span>  {</div>
<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> diff;</div>
<div class="line"><a name="l01743"></a><span class="lineno"> 1743</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="l01744"></a><span class="lineno"> 1744</span>  </div>
<div class="line"><a name="l01745"></a><span class="lineno"> 1745</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="l01746"></a><span class="lineno"> 1746</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="l01747"></a><span class="lineno"> 1747</span>  <span class="keywordflow">if</span> (diff>precision) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01748"></a><span class="lineno"> 1748</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="l01749"></a><span class="lineno"> 1749</span>  <span class="keywordflow">if</span> (diff>precision) <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>  }</div>
<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>  <span class="keywordflow">return</span> 1;</div>
<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__gpu_8cu_source.html#l00529">copyStateFromGPU()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01573">compareStates()</a>.</p>
</div>
</div>
<a id="a1275d604674224d87a173fb5bac78835"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1275d604674224d87a173fb5bac78835">◆ </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">int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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#l00934">934</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="l00935"></a><span class="lineno"> 935</span> {</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</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="l00937"></a><span class="lineno"> 937</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="l00938"></a><span class="lineno"> 938</span>  <a class="code" href="structComplex.html">Complex</a> rot1, rot2;</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  </div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  <span class="keywordtype">int</span> rankIsUpper;</div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></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="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  <a class="code" href="QuEST__cpu_8c.html#a215e2d6f88dbecc0b408b3573b5e144f">statevec_controlledCompactUnitaryLocal</a>(qureg, controlQubit, targetQubit, alpha, beta);</div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</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="l00950"></a><span class="lineno"> 950</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#adb4b0373425b282abed27742d0ce0872">getRotAngle</a>(rankIsUpper, &rot1, &rot2, alpha, beta);</div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</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="l00952"></a><span class="lineno"> 952</span>  <span class="comment">//printf("%d rank has pair rank: %d\n", qureg.rank, pairRank);</span></div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  </div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</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="l00957"></a><span class="lineno"> 957</span>  <span class="comment">// in the correct order</span></div>
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  <a class="code" href="QuEST__cpu_8c.html#a071baf8b6951d2a7d6529394b6f39364">statevec_controlledCompactUnitaryDistributed</a>(qureg,controlQubit,rot1,rot2,</div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <a class="code" href="QuEST__cpu_8c.html#a071baf8b6951d2a7d6529394b6f39364">statevec_controlledCompactUnitaryDistributed</a>(qureg,controlQubit,rot1,rot2,</div>
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  }</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  }</div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00241">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00493">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00317">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00272">getRotAngle()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02414">statevec_controlledCompactUnitaryDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02196">statevec_controlledCompactUnitaryLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00417">controlledCompactUnitary()</a>, <a class="el" href="QuEST__common_8c_source.html#l00330">statevec_controlledRotateAroundAxis()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00337">statevec_controlledRotateAroundAxisConj()</a>.</p>
</div>
</div>
<a id="a06b8474aec51579ff680fb66439e7fc6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a06b8474aec51579ff680fb66439e7fc6">◆ </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">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#l00579">579</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="l00579"></a><span class="lineno"> 579</span>  {</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  </div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</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="l00582"></a><span class="lineno"> 582</span>  <a class="code" href="QuEST__internal_8h.html#a0acfe30083d0bc2a84da196378a36122">statevec_multiControlledMultiQubitUnitary</a>(qureg, ctrlMask, targets, numTargets, u);</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01514">statevec_multiControlledMultiQubitUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00313">controlledMultiQubitUnitary()</a>.</p>
</div>
</div>
<a id="abb2eab4af99adcc59be24f4c91c6f6ad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb2eab4af99adcc59be24f4c91c6f6ad">◆ </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">int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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#l01075">1075</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="l01076"></a><span class="lineno"> 1076</span> {</div>
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</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="l01078"></a><span class="lineno"> 1078</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="l01079"></a><span class="lineno"> 1079</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="l01080"></a><span class="lineno"> 1080</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  </div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  <a class="code" href="QuEST__cpu_8c.html#ace1482ef82b83e7f926634a67b322fc4">statevec_controlledNotLocal</a>(qureg, controlQubit, targetQubit);</div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</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="l01088"></a><span class="lineno"> 1088</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="l01089"></a><span class="lineno"> 1089</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  <a class="code" href="QuEST__cpu_8c.html#a393da4c4bc582a757ca8406d8501aca0">statevec_controlledNotDistributed</a>(qureg,controlQubit,</div>
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//in</span></div>
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//out</span></div>
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  }</div>
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00241">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00493">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00317">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02742">statevec_controlledNotDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02679">statevec_controlledNotLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00524">controlledNot()</a>.</p>
</div>
</div>
<a id="a4e19ef93d01d7acea32ca646d623aedd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4e19ef93d01d7acea32ca646d623aedd">◆ </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">int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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#l01192">1192</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="l01193"></a><span class="lineno"> 1193</span> {</div>
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  <span class="keywordtype">int</span> conjFac = 1;</div>
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  </div>
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</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="l01197"></a><span class="lineno"> 1197</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="l01198"></a><span class="lineno"> 1198</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="l01199"></a><span class="lineno"> 1199</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  </div>
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  <a class="code" href="QuEST__cpu_8c.html#a06fb16aa4af7c54d36052a14d3ad58a7">statevec_controlledPauliYLocal</a>(qureg, controlQubit, targetQubit, conjFac);</div>
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</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="l01207"></a><span class="lineno"> 1207</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="l01208"></a><span class="lineno"> 1208</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</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="l01211"></a><span class="lineno"> 1211</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  <a class="code" href="QuEST__cpu_8c.html#a790add229738945812ae2048c03d58ec">statevec_controlledPauliYDistributed</a>(qureg,controlQubit,</div>
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//in</span></div>
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>,</div>
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  conjFac); <span class="comment">//out</span></div>
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>  <a class="code" href="QuEST__cpu_8c.html#a790add229738945812ae2048c03d58ec">statevec_controlledPauliYDistributed</a>(qureg,controlQubit,</div>
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//in</span></div>
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>,</div>
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  - conjFac); <span class="comment">//out</span></div>
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>  }</div>
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>  }</div>
<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00241">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00493">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00317">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03036">statevec_controlledPauliYDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02982">statevec_controlledPauliYLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00563">controlledPauliY()</a>.</p>
</div>
</div>
<a id="a4a2fa262d3f0dba372797b9bd35d9fa5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4a2fa262d3f0dba372797b9bd35d9fa5">◆ </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">int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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#l01225">1225</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="l01226"></a><span class="lineno"> 1226</span> {</div>
<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  <span class="keywordtype">int</span> conjFac = -1;</div>
<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>  </div>
<div class="line"><a name="l01229"></a><span class="lineno"> 1229</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="l01230"></a><span class="lineno"> 1230</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="l01231"></a><span class="lineno"> 1231</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="l01232"></a><span class="lineno"> 1232</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>  </div>
<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  <a class="code" href="QuEST__cpu_8c.html#a06fb16aa4af7c54d36052a14d3ad58a7">statevec_controlledPauliYLocal</a>(qureg, controlQubit, targetQubit, conjFac);</div>
<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01239"></a><span class="lineno"> 1239</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="l01240"></a><span class="lineno"> 1240</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="l01241"></a><span class="lineno"> 1241</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01243"></a><span class="lineno"> 1243</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="l01244"></a><span class="lineno"> 1244</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  <a class="code" href="QuEST__cpu_8c.html#a790add229738945812ae2048c03d58ec">statevec_controlledPauliYDistributed</a>(qureg,controlQubit,</div>
<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//in</span></div>
<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>,</div>
<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  conjFac); <span class="comment">//out</span></div>
<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  <a class="code" href="QuEST__cpu_8c.html#a790add229738945812ae2048c03d58ec">statevec_controlledPauliYDistributed</a>(qureg,controlQubit,</div>
<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//in</span></div>
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>,</div>
<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  - conjFac); <span class="comment">//out</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>  }</div>
<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00241">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00493">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00317">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03036">statevec_controlledPauliYDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02982">statevec_controlledPauliYLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00563">controlledPauliY()</a>.</p>
</div>
</div>
<a id="aaf78491e35d165edfd57387f9fffecbd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaf78491e35d165edfd57387f9fffecbd">◆ </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">int </td>
<td class="paramname"><em>idQubit1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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#l03687">3687</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="l03688"></a><span class="lineno"> 3688</span> {</div>
<div class="line"><a name="l03689"></a><span class="lineno"> 3689</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l03690"></a><span class="lineno"> 3690</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l03691"></a><span class="lineno"> 3691</span>  <span class="keywordtype">int</span> bit1, bit2;</div>
<div class="line"><a name="l03692"></a><span class="lineno"> 3692</span>  </div>
<div class="line"><a name="l03693"></a><span class="lineno"> 3693</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="l03694"></a><span class="lineno"> 3694</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="l03695"></a><span class="lineno"> 3695</span>  </div>
<div class="line"><a name="l03696"></a><span class="lineno"> 3696</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l03697"></a><span class="lineno"> 3697</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03698"></a><span class="lineno"> 3698</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="l03699"></a><span class="lineno"> 3699</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="l03700"></a><span class="lineno"> 3700</span>  </div>
<div class="line"><a name="l03701"></a><span class="lineno"> 3701</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03702"></a><span class="lineno"> 3702</span> <span class="preprocessor"># pragma omp parallel for \</span></div>
<div class="line"><a name="l03703"></a><span class="lineno"> 3703</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l03704"></a><span class="lineno"> 3704</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal,stateVecImag, chunkId,chunkSize,idQubit1,idQubit2 ) \</span></div>
<div class="line"><a name="l03705"></a><span class="lineno"> 3705</span> <span class="preprocessor"> private (index,bit1,bit2) \</span></div>
<div class="line"><a name="l03706"></a><span class="lineno"> 3706</span> <span class="preprocessor"> schedule (static)</span></div>
<div class="line"><a name="l03707"></a><span class="lineno"> 3707</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03708"></a><span class="lineno"> 3708</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l03709"></a><span class="lineno"> 3709</span>  bit1 = <a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a> (idQubit1, index+chunkId*chunkSize);</div>
<div class="line"><a name="l03710"></a><span class="lineno"> 3710</span>  bit2 = <a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a> (idQubit2, index+chunkId*chunkSize);</div>
<div class="line"><a name="l03711"></a><span class="lineno"> 3711</span>  <span class="keywordflow">if</span> (bit1 && bit2) {</div>
<div class="line"><a name="l03712"></a><span class="lineno"> 3712</span>  stateVecReal [index] = - stateVecReal [index];</div>
<div class="line"><a name="l03713"></a><span class="lineno"> 3713</span>  stateVecImag [index] = - stateVecImag [index];</div>
<div class="line"><a name="l03714"></a><span class="lineno"> 3714</span>  }</div>
<div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>  }</div>
<div class="line"><a name="l03716"></a><span class="lineno"> 3716</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00082">extractBit()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00575">controlledPhaseFlip()</a>.</p>
</div>
</div>
<a id="a63df1ec14ff7cc81c3f392ac10fcc744"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a63df1ec14ff7cc81c3f392ac10fcc744">◆ </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">int </td>
<td class="paramname"><em>idQubit1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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#l03226">3226</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="l03227"></a><span class="lineno"> 3227</span> {</div>
<div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>  <span class="keywordtype">int</span> bit1, bit2;</div>
<div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>  </div>
<div class="line"><a name="l03232"></a><span class="lineno"> 3232</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="l03233"></a><span class="lineno"> 3233</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="l03234"></a><span class="lineno"> 3234</span>  </div>
<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03237"></a><span class="lineno"> 3237</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="l03238"></a><span class="lineno"> 3238</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="l03239"></a><span class="lineno"> 3239</span>  </div>
<div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> stateRealLo, stateImagLo;</div>
<div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> cosAngle = cos(angle);</div>
<div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> sinAngle = sin(angle);</div>
<div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>  </div>
<div class="line"><a name="l03244"></a><span class="lineno"> 3244</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03245"></a><span class="lineno"> 3245</span> <span class="preprocessor"># pragma omp parallel for \</span></div>
<div class="line"><a name="l03246"></a><span class="lineno"> 3246</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l03247"></a><span class="lineno"> 3247</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal,stateVecImag, chunkId,chunkSize, \</span></div>
<div class="line"><a name="l03248"></a><span class="lineno"> 3248</span> <span class="preprocessor"> idQubit1,idQubit2,cosAngle,sinAngle ) \</span></div>
<div class="line"><a name="l03249"></a><span class="lineno"> 3249</span> <span class="preprocessor"> private (index,bit1,bit2,stateRealLo,stateImagLo) \</span></div>
<div class="line"><a name="l03250"></a><span class="lineno"> 3250</span> <span class="preprocessor"> schedule (static)</span></div>
<div class="line"><a name="l03251"></a><span class="lineno"> 3251</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>  bit1 = <a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a> (idQubit1, index+chunkId*chunkSize);</div>
<div class="line"><a name="l03254"></a><span class="lineno"> 3254</span>  bit2 = <a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a> (idQubit2, index+chunkId*chunkSize);</div>
<div class="line"><a name="l03255"></a><span class="lineno"> 3255</span>  <span class="keywordflow">if</span> (bit1 && bit2) {</div>
<div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>  </div>
<div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>  stateRealLo = stateVecReal[index];</div>
<div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>  stateImagLo = stateVecImag[index];</div>
<div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>  </div>
<div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>  stateVecReal[index] = cosAngle*stateRealLo - sinAngle*stateImagLo;</div>
<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>  stateVecImag[index] = sinAngle*stateRealLo + cosAngle*stateImagLo; </div>
<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>  }</div>
<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>  }</div>
<div class="line"><a name="l03264"></a><span class="lineno"> 3264</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00082">extractBit()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00498">controlledPhaseShift()</a>.</p>
</div>
</div>
<a id="a336c3286d2434fc892ebe20e9fa22a24"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a336c3286d2434fc892ebe20e9fa22a24">◆ </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">int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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#l00330">330</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="l00330"></a><span class="lineno"> 330</span>  {</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  </div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <a class="code" href="structComplex.html">Complex</a> alpha, beta;</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <a class="code" href="QuEST__common_8c.html#a71b3ae4402c1c5039d3086ca0e47a522">getComplexPairFromRotation</a>(angle, axis, &alpha, &beta);</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <a class="code" href="QuEST__internal_8h.html#a1275d604674224d87a173fb5bac78835">statevec_controlledCompactUnitary</a>(qureg, controlQubit, targetQubit, alpha, beta);</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00120">getComplexPairFromRotation()</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00934">statevec_controlledCompactUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00614">controlledRotateAroundAxis()</a>, <a class="el" href="QuEST__common_8c_source.html#l00346">statevec_controlledRotateX()</a>, <a class="el" href="QuEST__common_8c_source.html#l00352">statevec_controlledRotateY()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00358">statevec_controlledRotateZ()</a>.</p>
</div>
</div>
<a id="a5ea2384a9b33c94eac891aacbfa5da6a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5ea2384a9b33c94eac891aacbfa5da6a">◆ </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">int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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#l00337">337</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="l00337"></a><span class="lineno"> 337</span>  {</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  </div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <a class="code" href="structComplex.html">Complex</a> alpha, beta;</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <a class="code" href="QuEST__common_8c.html#a71b3ae4402c1c5039d3086ca0e47a522">getComplexPairFromRotation</a>(angle, axis, &alpha, &beta);</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  alpha.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> *= -1; </div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  beta.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> *= -1;</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <a class="code" href="QuEST__internal_8h.html#a1275d604674224d87a173fb5bac78835">statevec_controlledCompactUnitary</a>(qureg, controlQubit, targetQubit, alpha, beta);</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00120">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#l00934">statevec_controlledCompactUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00614">controlledRotateAroundAxis()</a>.</p>
</div>
</div>
<a id="aa32eed5bc38e85193e1aa23b74e8541b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa32eed5bc38e85193e1aa23b74e8541b">◆ </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">int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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#l00346">346</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="l00346"></a><span class="lineno"> 346</span>  {</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  </div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <a class="code" href="structVector.html">Vector</a> unitAxis = {1, 0, 0};</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <a class="code" href="QuEST__common_8c.html#a336c3286d2434fc892ebe20e9fa22a24">statevec_controlledRotateAroundAxis</a>(qureg, controlQubit, targetQubit, angle, unitAxis);</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00330">statevec_controlledRotateAroundAxis()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00220">controlledRotateX()</a>.</p>
</div>
</div>
<a id="ade67874c89179541f616b3685595d3ae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ade67874c89179541f616b3685595d3ae">◆ </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">int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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#l00352">352</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="l00352"></a><span class="lineno"> 352</span>  {</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  </div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <a class="code" href="structVector.html">Vector</a> unitAxis = {0, 1, 0};</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <a class="code" href="QuEST__common_8c.html#a336c3286d2434fc892ebe20e9fa22a24">statevec_controlledRotateAroundAxis</a>(qureg, controlQubit, targetQubit, angle, unitAxis);</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00330">statevec_controlledRotateAroundAxis()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00232">controlledRotateY()</a>.</p>
</div>
</div>
<a id="a3e11a9b9fa5ee16d4738a97f4590ee61"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3e11a9b9fa5ee16d4738a97f4590ee61">◆ </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">int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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#l00358">358</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="l00358"></a><span class="lineno"> 358</span>  {</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  </div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <a class="code" href="structVector.html">Vector</a> unitAxis = {0, 0, 1};</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <a class="code" href="QuEST__common_8c.html#a336c3286d2434fc892ebe20e9fa22a24">statevec_controlledRotateAroundAxis</a>(qureg, controlQubit, targetQubit, angle, unitAxis);</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00330">statevec_controlledRotateAroundAxis()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00244">controlledRotateZ()</a>.</p>
</div>
</div>
<a id="ad7ac4934371d72e24c6d1cea3d3da391"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad7ac4934371d72e24c6d1cea3d3da391">◆ </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">int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>targetQubit1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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#l00567">567</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="l00567"></a><span class="lineno"> 567</span>  {</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  </div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</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="l00570"></a><span class="lineno"> 570</span>  <a class="code" href="QuEST__internal_8h.html#a3eadcb581f2623e21e4967f791d0439c">statevec_multiControlledTwoQubitUnitary</a>(qureg, ctrlMask, targetQubit1, targetQubit2, u);</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01458">statevec_multiControlledTwoQubitUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00269">controlledTwoQubitUnitary()</a>.</p>
</div>
</div>
<a id="add9ca9956cdd81ed5d0b0f66168c04a3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#add9ca9956cdd81ed5d0b0f66168c04a3">◆ </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">int </td>
<td class="paramname"><em>controlQubit</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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#l00972">972</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="l00974"></a><span class="lineno"> 974</span> {</div>
<div class="line"><a name="l00975"></a><span class="lineno"> 975</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="l00976"></a><span class="lineno"> 976</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="l00977"></a><span class="lineno"> 977</span>  <a class="code" href="structComplex.html">Complex</a> rot1, rot2;</div>
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  </div>
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  <span class="keywordtype">int</span> rankIsUpper;</div>
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></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="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <a class="code" href="QuEST__cpu_8c.html#a903beb4f5d8753a964ce2dc5f9096a24">statevec_controlledUnitaryLocal</a>(qureg, controlQubit, targetQubit, u);</div>
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</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="l00989"></a><span class="lineno"> 989</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a5c9b2f129bdffaaba9857f6eddecbb17">getRotAngleFromUnitaryMatrix</a>(rankIsUpper, &rot1, &rot2, u);</div>
<div class="line"><a name="l00990"></a><span class="lineno"> 990</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="l00991"></a><span class="lineno"> 991</span>  <span class="comment">//printf("%d rank has pair rank: %d\n", qureg.rank, pairRank);</span></div>
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  </div>
<div class="line"><a name="l00995"></a><span class="lineno"> 995</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="l00996"></a><span class="lineno"> 996</span>  <span class="comment">// in the correct order</span></div>
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  <a class="code" href="QuEST__cpu_8c.html#a57368529b2a7e76fec423cbfe9980b22">statevec_controlledUnitaryDistributed</a>(qureg,controlQubit,rot1,rot2,</div>
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  <a class="code" href="QuEST__cpu_8c.html#a57368529b2a7e76fec423cbfe9980b22">statevec_controlledUnitaryDistributed</a>(qureg,controlQubit,rot1,rot2,</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</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> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00241">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00493">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00317">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00297">getRotAngleFromUnitaryMatrix()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02476">statevec_controlledUnitaryDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02336">statevec_controlledUnitaryLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00360">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#l01290">1290</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="l01291"></a><span class="lineno"> 1291</span> {</div>
<div class="line"><a name="l01292"></a><span class="lineno"> 1292</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="l01293"></a><span class="lineno"> 1293</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="l01294"></a><span class="lineno"> 1294</span>  </div>
<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>  <span class="keywordflow">if</span> (numAmpsPerRank > SIZE_MAX) {</div>
<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  printf(<span class="stringliteral">"Could not allocate memory (cannot fit numAmps into size_t)!"</span>);</div>
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>  exit (EXIT_FAILURE);</div>
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>  }</div>
<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>  </div>
<div class="line"><a name="l01300"></a><span class="lineno"> 1300</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="l01301"></a><span class="lineno"> 1301</span>  qureg-><a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real = malloc(arrSize);</div>
<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  qureg-><a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag = malloc(arrSize);</div>
<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  <span class="keywordflow">if</span> (env.<a class="code" href="structQuESTEnv.html#af22aacd7c9905accae28484785c193b4">numRanks</a>>1){</div>
<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  qureg-><a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.real = malloc(arrSize);</div>
<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  qureg-><a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.imag = malloc(arrSize);</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>  <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="l01309"></a><span class="lineno"> 1309</span>  && numAmpsPerRank ) {</div>
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  printf(<span class="stringliteral">"Could not allocate memory!"</span>);</div>
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  exit (EXIT_FAILURE);</div>
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>  }</div>
<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>  </div>
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</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="l01315"></a><span class="lineno"> 1315</span>  && numAmpsPerRank ) {</div>
<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  printf(<span class="stringliteral">"Could not allocate memory!"</span>);</div>
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>  exit (EXIT_FAILURE);</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 class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  qureg-><a class="code" href="structQureg.html#a0a86e8a50ea8c998b4a0a6640c5a1218">numQubitsInStateVec</a> = numQubits;</div>
<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  qureg-><a class="code" href="structQureg.html#adef4935cac95763c29164cf99b144ed4">numAmpsTotal</a> = numAmps;</div>
<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>  qureg-><a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a> = numAmpsPerRank;</div>
<div class="line"><a name="l01323"></a><span class="lineno"> 1323</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="l01324"></a><span class="lineno"> 1324</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="l01325"></a><span class="lineno"> 1325</span>  qureg-><a class="code" href="structQureg.html#acf78445e9435d09f44f0cc832c6aee79">isDensityMatrix</a> = 0;</div>
<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00348">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00325">Qureg::isDensityMatrix</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00334">Qureg::numAmpsTotal</a>, <a class="el" href="QuEST_8h_source.html#l00338">Qureg::numChunks</a>, <a class="el" href="QuEST_8h_source.html#l00329">Qureg::numQubitsInStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00365">QuESTEnv::numRanks</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00364">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#l00348">Qureg::secondLevelReduction</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00064">createCloneQureg()</a>, <a class="el" href="QuEST_8c_source.html#l00050">createDensityQureg()</a>, and <a class="el" href="QuEST_8c_source.html#l00036">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#l01328">1328</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="l01328"></a><span class="lineno"> 1328</span>  {</div>
<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>  </div>
<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>  qureg.<a class="code" href="structQureg.html#a0a86e8a50ea8c998b4a0a6640c5a1218">numQubitsInStateVec</a> = 0;</div>
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>  qureg.<a class="code" href="structQureg.html#adef4935cac95763c29164cf99b144ed4">numAmpsTotal</a> = 0;</div>
<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>  qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a> = 0;</div>
<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>  </div>
<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  free(qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real);</div>
<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  free(qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag);</div>
<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  <span class="keywordflow">if</span> (env.<a class="code" href="structQuESTEnv.html#af22aacd7c9905accae28484785c193b4">numRanks</a>>1){</div>
<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  free(qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.real);</div>
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  free(qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.imag);</div>
<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>  }</div>
<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real = NULL;</div>
<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag = NULL;</div>
<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.real = NULL;</div>
<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>.imag = NULL;</div>
<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00348">Qureg::firstLevelReduction</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00334">Qureg::numAmpsTotal</a>, <a class="el" href="QuEST_8h_source.html#l00329">Qureg::numQubitsInStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00365">QuESTEnv::numRanks</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00348">Qureg::secondLevelReduction</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00077">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#l00222">222</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="l00222"></a><span class="lineno"> 222</span>  {</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</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="l00224"></a><span class="lineno"> 224</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> el; </div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>==chunkId){</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</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="l00227"></a><span class="lineno"> 227</span>  }</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  MPI_Bcast(&el, 1, MPI_QuEST_REAL, chunkId, MPI_COMM_WORLD);</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">return</span> el; </div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00208">getChunkIdFromIndex()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00939">getAmp()</a>, <a class="el" href="QuEST_8c_source.html#l00949">getDensityAmp()</a>, <a class="el" href="QuEST_8c_source.html#l00925">getImagAmp()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00248">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#l00248">248</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="l00248"></a><span class="lineno"> 248</span>  {</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</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="l00250"></a><span class="lineno"> 250</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="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">return</span> real*real + imag*imag;</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</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#l00222">statevec_getImagAmp()</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00212">statevec_getRealAmp()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00932">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#l00212">212</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="l00212"></a><span class="lineno"> 212</span>  {</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</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="l00214"></a><span class="lineno"> 214</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> el; </div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>==chunkId){</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</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="l00217"></a><span class="lineno"> 217</span>  }</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  MPI_Bcast(&el, 1, MPI_QuEST_REAL, chunkId, MPI_COMM_WORLD);</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">return</span> el; </div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> } </div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00208">getChunkIdFromIndex()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00939">getAmp()</a>, <a class="el" href="QuEST_8c_source.html#l00949">getDensityAmp()</a>, <a class="el" href="QuEST_8c_source.html#l00918">getRealAmp()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00248">statevec_getProbAmp()</a>.</p>
</div>
</div>
<a id="af3fc7bd149c70f083b149050242cd55e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af3fc7bd149c70f083b149050242cd55e">◆ </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">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#l01258">1258</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="l01259"></a><span class="lineno"> 1259</span> {</div>
<div class="line"><a name="l01260"></a><span class="lineno"> 1260</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="l01261"></a><span class="lineno"> 1261</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="l01262"></a><span class="lineno"> 1262</span>  </div>
<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>  <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  <span class="keywordtype">int</span> rankIsUpper;</div>
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</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="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>  <a class="code" href="QuEST__cpu_8c.html#a86dbcc3db99294add9964741e19fbdab">statevec_hadamardLocal</a>(qureg, targetQubit);</div>
<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01272"></a><span class="lineno"> 1272</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="l01273"></a><span class="lineno"> 1273</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="l01274"></a><span class="lineno"> 1274</span>  <span class="comment">//printf("%d rank has pair rank: %d\n", qureg.rank, pairRank);</span></div>
<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01277"></a><span class="lineno"> 1277</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="l01278"></a><span class="lineno"> 1278</span>  <span class="comment">// in the correct order</span></div>
<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  <a class="code" href="QuEST__cpu_8c.html#abea6570b95fdfa102511ccd1fcb30685">statevec_hadamardDistributed</a>(qureg,</div>
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, rankIsUpper); <span class="comment">//output</span></div>
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  <a class="code" href="QuEST__cpu_8c.html#abea6570b95fdfa102511ccd1fcb30685">statevec_hadamardDistributed</a>(qureg,</div>
<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, rankIsUpper); <span class="comment">//output</span></div>
<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>  }</div>
<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  }</div>
<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00241">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00493">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00317">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03139">statevec_hadamardDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l03078">statevec_hadamardLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00849">agnostic_applyQFT()</a>, and <a class="el" href="QuEST_8c_source.html#l00176">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#l01464">1464</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="l01465"></a><span class="lineno"> 1465</span> {</div>
<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</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>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</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>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01473"></a><span class="lineno"> 1473</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="l01474"></a><span class="lineno"> 1474</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="l01475"></a><span class="lineno"> 1475</span>  </div>
<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>  <span class="comment">// initialise the state-vector to all-zeroes</span></div>
<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal, stateVecImag) \</span></div>
<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>  {</div>
<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>  stateVecReal[index] = 0.0;</div>
<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>  stateVecImag[index] = 0.0;</div>
<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>  }</div>
<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>  }</div>
<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00119">initBlankState()</a>, <a class="el" href="QuEST__common_8c_source.html#l00538">statevec_applyPauliSum()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l01494">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#l01536">1536</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="l01537"></a><span class="lineno"> 1537</span> {</div>
<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>  </div>
<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>  </div>
<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01545"></a><span class="lineno"> 1545</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="l01546"></a><span class="lineno"> 1546</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="l01547"></a><span class="lineno"> 1547</span>  </div>
<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>  <span class="comment">// initialise the state to vector to all zeros</span></div>
<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal, stateVecImag) \</span></div>
<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>  {</div>
<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>  stateVecReal[index] = 0.0;</div>
<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>  stateVecImag[index] = 0.0;</div>
<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>  }</div>
<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>  }</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">// give the specified classical state prob 1</span></div>
<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a> == stateInd/stateVecSize){</div>
<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>  stateVecReal[stateInd % stateVecSize] = 1.0;</div>
<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>  stateVecImag[stateInd % stateVecSize] = 0.0;</div>
<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>  }</div>
<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00134">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#l01657">1657</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="l01658"></a><span class="lineno"> 1658</span> {</div>
<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize;</div>
<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> indexOffset;</div>
<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>  </div>
<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>  chunkSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>  </div>
<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01667"></a><span class="lineno"> 1667</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="l01668"></a><span class="lineno"> 1668</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="l01669"></a><span class="lineno"> 1669</span>  </div>
<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>  indexOffset = chunkSize * qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>;</div>
<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>  </div>
<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>  <span class="comment">// initialise the state to |0000..0000></span></div>
<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> <span class="preprocessor"> shared (chunkSize, stateVecReal, stateVecImag, indexOffset) \</span></div>
<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>  {</div>
<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>  <span class="keywordflow">for</span> (index=0; index<chunkSize; index++) {</div>
<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>  stateVecReal[index] = ((indexOffset + index)*2.0)/10.0;</div>
<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>  stateVecImag[index] = ((indexOffset + index)*2.0+1.0)/10.0;</div>
<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>  }</div>
<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>  }</div>
<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01578">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#l01504">1504</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="l01505"></a><span class="lineno"> 1505</span> {</div>
<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize, stateVecSize;</div>
<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>  </div>
<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>  chunkSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>  stateVecSize = chunkSize*qureg.<a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a>;</div>
<div class="line"><a name="l01512"></a><span class="lineno"> 1512</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="l01513"></a><span class="lineno"> 1513</span>  </div>
<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01515"></a><span class="lineno"> 1515</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="l01516"></a><span class="lineno"> 1516</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="l01517"></a><span class="lineno"> 1517</span>  </div>
<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>  <span class="comment">// initialise the state to |+++..+++> = 1/normFactor {1, 1, 1, ...}</span></div>
<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> <span class="preprocessor"> shared (chunkSize, stateVecReal, stateVecImag, normFactor) \</span></div>
<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>  {</div>
<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>  <span class="keywordflow">for</span> (index=0; index<chunkSize; index++) {</div>
<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>  stateVecReal[index] = normFactor;</div>
<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>  stateVecImag[index] = 0.0;</div>
<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>  }</div>
<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>  }</div>
<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00338">Qureg::numChunks</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00125">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#l01691">1691</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="l01691"></a><span class="lineno"> 1691</span>  {</div>
<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize, stateVecSize;</div>
<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> indexInChunk, totalIndex;</div>
<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>  </div>
<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>  chunkSize = qureg-><a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>  stateVecSize = chunkSize*qureg-><a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a>;</div>
<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>  </div>
<div class="line"><a name="l01698"></a><span class="lineno"> 1698</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="l01699"></a><span class="lineno"> 1699</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="l01700"></a><span class="lineno"> 1700</span>  </div>
<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>  FILE *fp;</div>
<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>  <span class="keywordtype">char</span> line[200];</div>
<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>  </div>
<div class="line"><a name="l01704"></a><span class="lineno"> 1704</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="l01705"></a><span class="lineno"> 1705</span>  <span class="keywordflow">if</span> (rank==qureg-><a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>){</div>
<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>  fp = fopen(filename, <span class="stringliteral">"r"</span>);</div>
<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>  </div>
<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>  <span class="comment">// indicate file open failure</span></div>
<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>  <span class="keywordflow">if</span> (fp == NULL)</div>
<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>  <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>  </div>
<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>  indexInChunk = 0; totalIndex = 0;</div>
<div class="line"><a name="l01713"></a><span class="lineno"> 1713</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="l01714"></a><span class="lineno"> 1714</span>  <span class="keywordflow">if</span> (line[0]!=<span class="charliteral">'#'</span>){</div>
<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>  <span class="keywordtype">int</span> chunkId = (int) (totalIndex/chunkSize);</div>
<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>  <span class="keywordflow">if</span> (chunkId==qureg-><a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>){</div>
<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> <span class="preprocessor"> # if QuEST_PREC==1</span></div>
<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>  sscanf(line, <span class="stringliteral">"%f, %f"</span>, &(stateVecReal[indexInChunk]), </div>
<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>  &(stateVecImag[indexInChunk])); </div>
<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> <span class="preprocessor"> # elif QuEST_PREC==2 </span></div>
<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>  sscanf(line, <span class="stringliteral">"%lf, %lf"</span>, &(stateVecReal[indexInChunk]), </div>
<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>  &(stateVecImag[indexInChunk]));</div>
<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> <span class="preprocessor"> # elif QuEST_PREC==4</span></div>
<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>  sscanf(line, <span class="stringliteral">"%Lf, %Lf"</span>, &(stateVecReal[indexInChunk]), </div>
<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>  &(stateVecImag[indexInChunk]));</div>
<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> <span class="preprocessor"> # endif</span></div>
<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>  indexInChunk += 1;</div>
<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>  }</div>
<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>  totalIndex += 1;</div>
<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>  }</div>
<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>  } </div>
<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>  fclose(fp);</div>
<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>  }</div>
<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>  <a class="code" href="group__debug.html#ga8d31fe2d1ad4d01e2a1f5f6b8bc15b77">syncQuESTEnv</a>(env);</div>
<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>  }</div>
<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>  </div>
<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>  <span class="comment">// indicate success</span></div>
<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>  <span class="keywordflow">return</span> 1;</div>
<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00519">copyStateToGPU()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00338">Qureg::numChunks</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00164">syncQuESTEnv()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01582">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">outcome</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#l01611">1611</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="l01612"></a><span class="lineno"> 1612</span> {</div>
<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> chunkSize, stateVecSize;</div>
<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>  <span class="keywordtype">int</span> bit;</div>
<div class="line"><a name="l01616"></a><span class="lineno"> 1616</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="l01617"></a><span class="lineno"> 1617</span>  </div>
<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>  chunkSize = qureg-><a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>  stateVecSize = chunkSize*qureg-><a class="code" href="structQureg.html#aa3deb7163aab90a61e755a1f200f5413">numChunks</a>;</div>
<div class="line"><a name="l01621"></a><span class="lineno"> 1621</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="l01622"></a><span class="lineno"> 1622</span>  </div>
<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>  <span class="comment">// Can't use qureg->stateVec as a private OMP var</span></div>
<div class="line"><a name="l01624"></a><span class="lineno"> 1624</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="l01625"></a><span class="lineno"> 1625</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="l01626"></a><span class="lineno"> 1626</span>  </div>
<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>  <span class="comment">// initialise the state to |0000..0000></span></div>
<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> <span class="preprocessor"> shared (chunkSize, stateVecReal, stateVecImag, normFactor, qubitId, outcome, chunkId) \</span></div>
<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> <span class="preprocessor"> private (index, bit)</span></div>
<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>  {</div>
<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>  <span class="keywordflow">for</span> (index=0; index<chunkSize; index++) {</div>
<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>  bit = <a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a>(qubitId, index+chunkId*chunkSize);</div>
<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>  <span class="keywordflow">if</span> (bit==outcome) {</div>
<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>  stateVecReal[index] = normFactor;</div>
<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>  stateVecImag[index] = 0.0;</div>
<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>  stateVecReal[index] = 0.0;</div>
<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>  stateVecImag[index] = 0.0;</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>  }</div>
<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>  }</div>
<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00082">extractBit()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00338">Qureg::numChunks</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01587">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#l01494">1494</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="l01495"></a><span class="lineno"> 1495</span> {</div>
<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>  <a class="code" href="QuEST__cpu_8c.html#a758bad4237ff0bf3b4ff5be626a982ae">statevec_initBlankState</a>(qureg);</div>
<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>==0){</div>
<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>  <span class="comment">// zero state |0000..0000> has probability 1</span></div>
<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.real[0] = 1.0;</div>
<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>.imag[0] = 0.0;</div>
<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>  }</div>
<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l01464">statevec_initBlankState()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00113">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#l00364">364</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="l00364"></a><span class="lineno"> 364</span>  {</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  </div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> zeroProb = <a class="code" href="QuEST__internal_8h.html#a63cb88a5f4eb12fef087435b8db3f8eb">statevec_calcProbOfOutcome</a>(qureg, measureQubit, 0);</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</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="l00368"></a><span class="lineno"> 368</span>  <a class="code" href="QuEST__internal_8h.html#a008becc4a18f868340836e0ab9fd6df6">statevec_collapseToKnownProbOutcome</a>(qureg, measureQubit, outcome, *outcomeProb);</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">return</span> outcome;</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00168">generateMeasurementOutcome()</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01312">statevec_calcProbOfOutcome()</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01368">statevec_collapseToKnownProbOutcome()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00998">measure()</a>, and <a class="el" href="QuEST_8c_source.html#l00985">measureWithStats()</a>.</p>
</div>
</div>
<a id="a13ecc24b355a5213d745651cde56bd71"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a13ecc24b355a5213d745651cde56bd71">◆ </a></span>statevec_multiControlledMultiQubitNot()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_multiControlledMultiQubitNot </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>ctrlMask</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int </td>
<td class="paramname"><em>targMask</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#l01097">1097</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="l01098"></a><span class="lineno"> 1098</span> { </div>
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  <span class="comment">/* operation is the same regardless of control and target ordering, hence </span></div>
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="comment"> * we accept only bitMasks (for convenience of caller, when shifting qubits</span></div>
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> <span class="comment"> * for density matrices)</span></div>
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> <span class="comment"> */</span></div>
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  </div>
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  <span class="comment">// global index of the first basis state in this node</span></div>
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> firstInd = 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="l01106"></a><span class="lineno"> 1106</span>  </div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  <span class="comment">/* optimisation: if this node doesn't contain any amplitudes for which {ctrls}={1}</span></div>
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="comment"> * (and hence, neither does the pair node), then these pair nodes have nothing to modify </span></div>
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="comment"> * nor any need to communicate, and can halt. No ctrls are contained in the node </span></div>
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="comment"> * if the distance from the first index, to the next index where {ctrls}=1, is </span></div>
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="comment"> * greater than the total contained amplitudes. This is a worthwhile optimisation, </span></div>
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="comment"> * since although we must still wait for the slowest node, we have potentially reduced </span></div>
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="comment"> * the network traffic and might avoid saturation. </span></div>
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="comment"> */</span></div>
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <span class="keywordflow">if</span> ((firstInd|ctrlMask) - firstInd >= qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>)</div>
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  </div>
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  <span class="comment">/* nodes communicate pairwise, and (ignoring ctrls) swap all their amplitudes with mate.</span></div>
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="comment"> * hence we find |pairState> = X_{targs}|firstStateInNode>, determine which node contains </span></div>
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="comment"> * |pairState>, and swap state-vector with it (unless it happens to be this node).</span></div>
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="comment"> */</span></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">// global index of the corresponding NOT'd first basis state</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> pairInd = firstInd ^ targMask;</div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  <span class="keywordtype">int</span> pairRank = pairInd / qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  <span class="keywordtype">int</span> useLocalDataOnly = (pairRank == qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>);</div>
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  </div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  <span class="keywordflow">if</span> (useLocalDataOnly) {</div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  <span class="comment">// swaps amplitudes locally, setting |a>=X|b>, and |b>=X|a></span></div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  <a class="code" href="QuEST__cpu_8c.html#ac7d30ce54573c75b35386cd0e284adc5">statevec_multiControlledMultiQubitNotLocal</a>(qureg, ctrlMask, targMask);</div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  <span class="comment">// swaps amplitudes with pair node</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">// modifies only |a>=X|b> (pair node handles the converse)</span></div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <a class="code" href="QuEST__cpu_8c.html#ae6f0c9ed9261afbab4712e056a88763d">statevec_multiControlledMultiQubitNotDistributed</a>(</div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  qureg, ctrlMask, targMask,</div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">// in</span></div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">// out</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><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00493">exchangeStateVectors()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02834">statevec_multiControlledMultiQubitNotDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02778">statevec_multiControlledMultiQubitNotLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00549">multiControlledMultiQubitNot()</a>, and <a class="el" href="QuEST_8c_source.html#l00536">multiQubitNot()</a>.</p>
</div>
</div>
<a id="a0acfe30083d0bc2a84da196378a36122"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0acfe30083d0bc2a84da196378a36122">◆ </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">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>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000002">Todo:</a></b></dt><dd>refactor so that the 'swap back' isn't performed; instead the qubit locations are updated. </dd></dl>
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01514">1514</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="l01514"></a><span class="lineno"> 1514</span>  {</div>
<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>  </div>
<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>  <span class="comment">// bit mask of target qubits (for quick collision checking)</span></div>
<div class="line"><a name="l01517"></a><span class="lineno"> 1517</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#acc45bb8300922ea5933e294921e25ea2">getQubitBitMask</a>(targs, numTargs);</div>
<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>  </div>
<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>  <span class="comment">// find lowest qubit available for swapping (isn't in targs)</span></div>
<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>  <span class="keywordtype">int</span> freeQb=0;</div>
<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>  <span class="keywordflow">while</span> (<a class="code" href="QuEST__cpu__internal_8h.html#ae94d012c3da6c84599e99f6afea81f5f">maskContainsBit</a>(targMask, freeQb))</div>
<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>  freeQb++;</div>
<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>  </div>
<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>  <span class="comment">// assign indices of where each target will be swapped to (else itself)</span></div>
<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>  <span class="keywordtype">int</span> swapTargs[numTargs];</div>
<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t<numTargs; t++) {</div>
<div class="line"><a name="l01527"></a><span class="lineno"> 1527</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="l01528"></a><span class="lineno"> 1528</span>  swapTargs[t] = targs[t];</div>
<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>  <span class="comment">// mark swap</span></div>
<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>  swapTargs[t] = freeQb;</div>
<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>  </div>
<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>  <span class="comment">// update ctrlMask if swapped-out qubit was a control</span></div>
<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__cpu__internal_8h.html#ae94d012c3da6c84599e99f6afea81f5f">maskContainsBit</a>(ctrlMask, swapTargs[t]))</div>
<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>  ctrlMask = <a class="code" href="QuEST__gpu_8cu.html#ae1b7788cf504ec3d79de3855f97929c7">flipBit</a>(<a class="code" href="QuEST__gpu_8cu.html#ae1b7788cf504ec3d79de3855f97929c7">flipBit</a>(ctrlMask, swapTargs[t]), targs[t]); <span class="comment">// swap targ and ctrl</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="comment">// locate next available on-chunk qubit</span></div>
<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>  freeQb++;</div>
<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>  <span class="keywordflow">while</span> (<a class="code" href="QuEST__cpu__internal_8h.html#ae94d012c3da6c84599e99f6afea81f5f">maskContainsBit</a>(targMask, freeQb))</div>
<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>  freeQb++;</div>
<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>  }</div>
<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>  }</div>
<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>  </div>
<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>  <span class="comment">// perform swaps as necessary </span></div>
<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t<numTargs; t++)</div>
<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>  <span class="keywordflow">if</span> (swapTargs[t] != targs[t])</div>
<div class="line"><a name="l01547"></a><span class="lineno"> 1547</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="l01548"></a><span class="lineno"> 1548</span>  </div>
<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>  <span class="comment">// all target qubits have now been swapped into local memory</span></div>
<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>  <a class="code" href="QuEST__cpu_8c.html#a0aedcccfa50c7aaa8b7fc4c14d7cdfb8">statevec_multiControlledMultiQubitUnitaryLocal</a>(qureg, ctrlMask, swapTargs, numTargs, u);</div>
<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>  </div>
<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>  <span class="comment">// undo swaps </span></div>
<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t<numTargs; t++)</div>
<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>  <span class="keywordflow">if</span> (swapTargs[t] != targs[t])</div>
<div class="line"><a name="l01555"></a><span class="lineno"> 1555</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="l01556"></a><span class="lineno"> 1556</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#l00050">getQubitBitMask()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00190">ComplexMatrixN::imag</a>, <a class="el" href="QuEST__cpu__internal_8h_source.html#l00034">maskContainsBit()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00188">ComplexMatrixN::numQubits</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00189">ComplexMatrixN::real</a>, <a class="el" href="QuEST__cpu_8c_source.html#l01912">statevec_multiControlledMultiQubitUnitaryLocal()</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01431">statevec_swapQubitAmps()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01114">applyMultiControlledMatrixN()</a>, <a class="el" href="QuEST__common_8c_source.html#l00634">densmatr_applyMultiQubitKrausSuperoperator()</a>, <a class="el" href="QuEST__common_8c_source.html#l00626">densmatr_applyTwoQubitKrausSuperoperator()</a>, <a class="el" href="QuEST_8c_source.html#l00330">multiControlledMultiQubitUnitary()</a>, <a class="el" href="QuEST__common_8c_source.html#l00579">statevec_controlledMultiQubitUnitary()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00573">statevec_multiQubitUnitary()</a>.</p>
</div>
</div>
<a id="a08d2e22870f3ef0289e355d634ea17a2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a08d2e22870f3ef0289e355d634ea17a2">◆ </a></span>statevec_multiControlledMultiRotatePauli()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_multiControlledMultiRotatePauli </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>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 class="definition">Definition at line <a class="el" href="QuEST__common_8c_source.html#l00453">453</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="l00456"></a><span class="lineno"> 456</span>  {</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> fac = 1/sqrt(2);</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> sgn = (applyConj)? 1 : -1;</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <a class="code" href="structComplexMatrix2.html">ComplexMatrix2</a> uRx = {.<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>={{fac,0},{0,fac}}, .imag={{0,sgn*fac},{sgn*fac,0}}}; <span class="comment">// Rx(pi/2)* rotates Z -> Y</span></div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <a class="code" href="structComplexMatrix2.html">ComplexMatrix2</a> uRy = {.<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>={{fac,fac},{-fac,fac}}, .imag={{0,0},{0,0}}}; <span class="comment">// Ry(-pi/2) rotates Z -> X</span></div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  </div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="comment">// this function is controlled on the all-one state, so no ctrl flips</span></div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ctrlFlipMask = 0;</div>
<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>  <span class="comment">// mask may be modified to remove superfluous Identity ops</span></div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</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#acc45bb8300922ea5933e294921e25ea2">getQubitBitMask</a>(targetQubits, numTargets);</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  </div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="comment">// rotate basis so that exp(Z) will effect exp(Y) and exp(X)</span></div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t < numTargets; t++) {</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</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="l00471"></a><span class="lineno"> 471</span>  targMask -= 1LL << targetQubits[t]; <span class="comment">// remove target from mask</span></div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</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="l00473"></a><span class="lineno"> 473</span>  <a class="code" href="QuEST__internal_8h.html#a600bda10463e2078ce746ec28f2d39c9">statevec_multiControlledUnitary</a>(qureg, ctrlMask, ctrlFlipMask, targetQubits[t], uRy);</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</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="l00475"></a><span class="lineno"> 475</span>  <a class="code" href="QuEST__internal_8h.html#a600bda10463e2078ce746ec28f2d39c9">statevec_multiControlledUnitary</a>(qureg, ctrlMask, ctrlFlipMask, targetQubits[t], uRx);</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="comment">// (targetPaulis[t] == 3) is Z basis</span></div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  }</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  </div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="comment">// does nothing if there are no qubits to 'rotate'</span></div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <span class="keywordflow">if</span> (targMask != 0)</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <a class="code" href="QuEST__internal_8h.html#a3ed30f823a59890be17441d97ce90c5c">statevec_multiControlledMultiRotateZ</a>(qureg, ctrlMask, targMask, (applyConj)? -angle : angle);</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  </div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="comment">// undo X and Y basis rotations</span></div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  uRx.<a class="code" href="structComplexMatrix2.html#a3a2b60a9e00ccef054a6de3b9307c1be">imag</a>[0][1] *= -1; uRx.<a class="code" href="structComplexMatrix2.html#a3a2b60a9e00ccef054a6de3b9307c1be">imag</a>[1][0] *= -1;</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  uRy.<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>[0][1] *= -1; uRy.<a class="code" href="structComplexMatrix2.html#a3ea98d545b67a190ee6abe936c72076f">real</a>[1][0] *= -1;</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t < numTargets; t++) {</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</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="l00488"></a><span class="lineno"> 488</span>  <a class="code" href="QuEST__internal_8h.html#a600bda10463e2078ce746ec28f2d39c9">statevec_multiControlledUnitary</a>(qureg, ctrlMask, ctrlFlipMask, targetQubits[t], uRy);</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</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="l00490"></a><span class="lineno"> 490</span>  <a class="code" href="QuEST__internal_8h.html#a600bda10463e2078ce746ec28f2d39c9">statevec_multiControlledUnitary</a>(qureg, ctrlMask, ctrlFlipMask, targetQubits[t], uRx);</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  }</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00050">getQubitBitMask()</a>, <a class="el" href="QuEST_8h_source.html#l00140">ComplexMatrix2::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#l00139">ComplexMatrix2::real</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03358">statevec_multiControlledMultiRotateZ()</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01011">statevec_multiControlledUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00705">multiControlledMultiRotatePauli()</a>.</p>
</div>
</div>
<a id="a3ed30f823a59890be17441d97ce90c5c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ed30f823a59890be17441d97ce90c5c">◆ </a></span>statevec_multiControlledMultiRotateZ()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void statevec_multiControlledMultiRotateZ </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">long long int </td>
<td class="paramname"><em>targMask</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#l03358">3358</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="l03359"></a><span class="lineno"> 3359</span> {</div>
<div class="line"><a name="l03360"></a><span class="lineno"> 3360</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>;</div>
<div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>  </div>
<div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03363"></a><span class="lineno"> 3363</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="l03364"></a><span class="lineno"> 3364</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="l03365"></a><span class="lineno"> 3365</span>  </div>
<div class="line"><a name="l03366"></a><span class="lineno"> 3366</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> stateReal, stateImag;</div>
<div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> cosAngle = cos(angle/2.0);</div>
<div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> sinAngle = sin(angle/2.0); </div>
<div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>  </div>
<div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>  <span class="comment">// = +-1, to flip sinAngle based on target qubit parity, to effect</span></div>
<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>  <span class="comment">// exp(-angle/2 i fac_j)|j></span></div>
<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>  <span class="keywordtype">int</span> fac; </div>
<div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index, globalIndex;</div>
<div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>  </div>
<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03376"></a><span class="lineno"> 3376</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l03377"></a><span class="lineno"> 3377</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span> <span class="preprocessor"> shared (offset, stateVecSize, stateVecReal,stateVecImag, ctrlMask,targMask, cosAngle,sinAngle) \</span></div>
<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span> <span class="preprocessor"> private (index,globalIndex, fac, stateReal,stateImag)</span></div>
<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>  {</div>
<div class="line"><a name="l03382"></a><span class="lineno"> 3382</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03383"></a><span class="lineno"> 3383</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l03384"></a><span class="lineno"> 3384</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>  stateReal = stateVecReal[index];</div>
<div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>  stateImag = stateVecImag[index];</div>
<div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>  </div>
<div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>  <span class="comment">// states with not-all-one control qubits are unmodified</span></div>
<div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>  globalIndex = index + offset;</div>
<div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>  <span class="keywordflow">if</span> (ctrlMask && ((ctrlMask & globalIndex) != ctrlMask))</div>
<div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>  <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>  </div>
<div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>  <span class="comment">// odd-parity target qubits get fac_j = -1 (avoid thread divergence)</span></div>
<div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>  fac = 1-2*<a class="code" href="QuEST__cpu_8c.html#a37e522505286f17fe6ef74b9f607a5c6">getBitMaskParity</a>(targMask & globalIndex);</div>
<div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>  stateVecReal[index] = cosAngle*stateReal + fac * sinAngle*stateImag;</div>
<div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>  stateVecImag[index] = - fac * sinAngle*stateReal + cosAngle*stateImag; </div>
<div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>  }</div>
<div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>  } </div>
<div class="line"><a name="l03400"></a><span class="lineno"> 3400</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03307">getBitMaskParity()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00668">multiControlledMultiRotateZ()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00453">statevec_multiControlledMultiRotatePauli()</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#l03718">3718</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="l03719"></a><span class="lineno"> 3719</span> {</div>
<div class="line"><a name="l03720"></a><span class="lineno"> 3720</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l03721"></a><span class="lineno"> 3721</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l03722"></a><span class="lineno"> 3722</span>  </div>
<div class="line"><a name="l03723"></a><span class="lineno"> 3723</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="l03724"></a><span class="lineno"> 3724</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="l03725"></a><span class="lineno"> 3725</span>  </div>
<div class="line"><a name="l03726"></a><span class="lineno"> 3726</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#acc45bb8300922ea5933e294921e25ea2">getQubitBitMask</a>(controlQubits, numControlQubits);</div>
<div class="line"><a name="l03727"></a><span class="lineno"> 3727</span>  </div>
<div class="line"><a name="l03728"></a><span class="lineno"> 3728</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03729"></a><span class="lineno"> 3729</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="l03730"></a><span class="lineno"> 3730</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="l03731"></a><span class="lineno"> 3731</span>  </div>
<div class="line"><a name="l03732"></a><span class="lineno"> 3732</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03733"></a><span class="lineno"> 3733</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l03734"></a><span class="lineno"> 3734</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l03735"></a><span class="lineno"> 3735</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal,stateVecImag, mask, chunkId,chunkSize ) \</span></div>
<div class="line"><a name="l03736"></a><span class="lineno"> 3736</span> <span class="preprocessor"> private (index)</span></div>
<div class="line"><a name="l03737"></a><span class="lineno"> 3737</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03738"></a><span class="lineno"> 3738</span>  {</div>
<div class="line"><a name="l03739"></a><span class="lineno"> 3739</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03740"></a><span class="lineno"> 3740</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l03741"></a><span class="lineno"> 3741</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03742"></a><span class="lineno"> 3742</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l03743"></a><span class="lineno"> 3743</span>  <span class="keywordflow">if</span> (mask == (mask & (index+chunkId*chunkSize)) ){</div>
<div class="line"><a name="l03744"></a><span class="lineno"> 3744</span>  stateVecReal [index] = - stateVecReal [index];</div>
<div class="line"><a name="l03745"></a><span class="lineno"> 3745</span>  stateVecImag [index] = - stateVecImag [index];</div>
<div class="line"><a name="l03746"></a><span class="lineno"> 3746</span>  }</div>
<div class="line"><a name="l03747"></a><span class="lineno"> 3747</span>  }</div>
<div class="line"><a name="l03748"></a><span class="lineno"> 3748</span>  }</div>
<div class="line"><a name="l03749"></a><span class="lineno"> 3749</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__common_8c_source.html#l00050">getQubitBitMask()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00587">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#l03266">3266</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="l03267"></a><span class="lineno"> 3267</span> {</div>
<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>  </div>
<div class="line"><a name="l03271"></a><span class="lineno"> 3271</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="l03272"></a><span class="lineno"> 3272</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="l03273"></a><span class="lineno"> 3273</span>  </div>
<div class="line"><a name="l03274"></a><span class="lineno"> 3274</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#acc45bb8300922ea5933e294921e25ea2">getQubitBitMask</a>(controlQubits, numControlQubits);</div>
<div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>  </div>
<div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03277"></a><span class="lineno"> 3277</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="l03278"></a><span class="lineno"> 3278</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="l03279"></a><span class="lineno"> 3279</span>  </div>
<div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> stateRealLo, stateImagLo;</div>
<div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> cosAngle = cos(angle);</div>
<div class="line"><a name="l03282"></a><span class="lineno"> 3282</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> sinAngle = sin(angle);</div>
<div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>  </div>
<div class="line"><a name="l03284"></a><span class="lineno"> 3284</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03285"></a><span class="lineno"> 3285</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l03286"></a><span class="lineno"> 3286</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l03287"></a><span class="lineno"> 3287</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal, stateVecImag, mask, chunkId,chunkSize,cosAngle,sinAngle) \</span></div>
<div class="line"><a name="l03288"></a><span class="lineno"> 3288</span> <span class="preprocessor"> private (index, stateRealLo, stateImagLo)</span></div>
<div class="line"><a name="l03289"></a><span class="lineno"> 3289</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>  {</div>
<div class="line"><a name="l03291"></a><span class="lineno"> 3291</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03292"></a><span class="lineno"> 3292</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l03293"></a><span class="lineno"> 3293</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>  <span class="keywordflow">if</span> (mask == (mask & (index+chunkId*chunkSize)) ){</div>
<div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>  </div>
<div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>  stateRealLo = stateVecReal[index];</div>
<div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>  stateImagLo = stateVecImag[index];</div>
<div class="line"><a name="l03299"></a><span class="lineno"> 3299</span>  </div>
<div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>  stateVecReal[index] = cosAngle*stateRealLo - sinAngle*stateImagLo;</div>
<div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>  stateVecImag[index] = sinAngle*stateRealLo + cosAngle*stateImagLo; </div>
<div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>  }</div>
<div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>  }</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> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__common_8c_source.html#l00050">getQubitBitMask()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00510">multiControlledPhaseShift()</a>.</p>
</div>
</div>
<a id="a3eadcb581f2623e21e4967f791d0439c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3eadcb581f2623e21e4967f791d0439c">◆ </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">int </td>
<td class="paramname"><em>q1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000001">Todo:</a></b></dt><dd><p class="startdd">refactor so that the 'swap back' isn't performed; instead the qubit locations are updated. </p>
<p class="enddd">the double swap (q1,q2 to 0,1) may be possible simultaneously by a bespoke swap routine. </p>
</dd></dl>
<p class="definition">Definition at line <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01458">1458</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="l01458"></a><span class="lineno"> 1458</span>  {</div>
<div class="line"><a name="l01459"></a><span class="lineno"> 1459</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="l01460"></a><span class="lineno"> 1460</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="l01461"></a><span class="lineno"> 1461</span>  </div>
<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>  <span class="keywordflow">if</span> (q1FitsInNode && q2FitsInNode) { </div>
<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>  <a class="code" href="QuEST__cpu_8c.html#af8236a00389137b5eff986a40577eaf3">statevec_multiControlledTwoQubitUnitaryLocal</a>(qureg, ctrlMask, q1, q2, u);</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>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (q1FitsInNode) {</div>
<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>  <span class="keywordtype">int</span> qSwap = (q1 > 0)? q1-1 : q1+1;</div>
<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>  </div>
<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>  <span class="comment">// ensure ctrl == qSwap, ensure ctrlMask updates under the swap</span></div>
<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__cpu__internal_8h.html#ae94d012c3da6c84599e99f6afea81f5f">maskContainsBit</a>(ctrlMask, qSwap))</div>
<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>  ctrlMask = <a class="code" href="QuEST__gpu_8cu.html#ae1b7788cf504ec3d79de3855f97929c7">flipBit</a>(<a class="code" href="QuEST__gpu_8cu.html#ae1b7788cf504ec3d79de3855f97929c7">flipBit</a>(ctrlMask, q2), qSwap);</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>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q2, qSwap);</div>
<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>  <a class="code" href="QuEST__cpu_8c.html#af8236a00389137b5eff986a40577eaf3">statevec_multiControlledTwoQubitUnitaryLocal</a>(qureg, ctrlMask, q1, qSwap, u);</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, q2, qSwap);</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="keywordflow">else</span> <span class="keywordflow">if</span> (q2FitsInNode) {</div>
<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>  <span class="keywordtype">int</span> qSwap = (q2 > 0)? q2-1 : q2+1;</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">// ensure ctrl == qSwap, ensure ctrlMask updates under the swap</span></div>
<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__cpu__internal_8h.html#ae94d012c3da6c84599e99f6afea81f5f">maskContainsBit</a>(ctrlMask, qSwap))</div>
<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>  ctrlMask = <a class="code" href="QuEST__gpu_8cu.html#ae1b7788cf504ec3d79de3855f97929c7">flipBit</a>(<a class="code" href="QuEST__gpu_8cu.html#ae1b7788cf504ec3d79de3855f97929c7">flipBit</a>(ctrlMask, q1), qSwap);</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>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q1, qSwap);</div>
<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>  <a class="code" href="QuEST__cpu_8c.html#af8236a00389137b5eff986a40577eaf3">statevec_multiControlledTwoQubitUnitaryLocal</a>(qureg, ctrlMask, qSwap, q2, u);</div>
<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q1, qSwap);</div>
<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>  </div>
<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>  <span class="comment">// we know with certainty that both q1 and q2 >= 2</span></div>
<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>  <span class="keywordtype">int</span> swap1 = 0;</div>
<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>  <span class="keywordtype">int</span> swap2 = 1;</div>
<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>  </div>
<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>  <span class="comment">// if ctrl == swap1 or swap2, ensure ctrlMask updates under the swap</span></div>
<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__cpu__internal_8h.html#ae94d012c3da6c84599e99f6afea81f5f">maskContainsBit</a>(ctrlMask, swap1))</div>
<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>  ctrlMask = <a class="code" href="QuEST__gpu_8cu.html#ae1b7788cf504ec3d79de3855f97929c7">flipBit</a>(<a class="code" href="QuEST__gpu_8cu.html#ae1b7788cf504ec3d79de3855f97929c7">flipBit</a>(ctrlMask, swap1), q1);</div>
<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>  <span class="keywordflow">if</span> (<a class="code" href="QuEST__cpu__internal_8h.html#ae94d012c3da6c84599e99f6afea81f5f">maskContainsBit</a>(ctrlMask, swap2))</div>
<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>  ctrlMask = <a class="code" href="QuEST__gpu_8cu.html#ae1b7788cf504ec3d79de3855f97929c7">flipBit</a>(<a class="code" href="QuEST__gpu_8cu.html#ae1b7788cf504ec3d79de3855f97929c7">flipBit</a>(ctrlMask, swap2), q2);</div>
<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>  </div>
<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q1, swap1);</div>
<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q2, swap2);</div>
<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>  <a class="code" href="QuEST__cpu_8c.html#af8236a00389137b5eff986a40577eaf3">statevec_multiControlledTwoQubitUnitaryLocal</a>(qureg, ctrlMask, swap1, swap2, u);</div>
<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q1, swap1);</div>
<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ab7478fcaf6357ab202d72853b672e375">statevec_swapQubitAmps</a>(qureg, q2, swap2);</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><!-- 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#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST__cpu__internal_8h_source.html#l00034">maskContainsBit()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__cpu_8c_source.html#l01813">statevec_multiControlledTwoQubitUnitaryLocal()</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01431">statevec_swapQubitAmps()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00620">densmatr_applyKrausSuperoperator()</a>, <a class="el" href="QuEST_8c_source.html#l00282">multiControlledTwoQubitUnitary()</a>, <a class="el" href="QuEST__common_8c_source.html#l00567">statevec_controlledTwoQubitUnitary()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00561">statevec_twoQubitUnitary()</a>.</p>
</div>
</div>
<a id="a600bda10463e2078ce746ec28f2d39c9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a600bda10463e2078ce746ec28f2d39c9">◆ </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">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#l01011">1011</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="l01012"></a><span class="lineno"> 1012</span> {</div>
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</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="l01014"></a><span class="lineno"> 1014</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="l01015"></a><span class="lineno"> 1015</span>  <a class="code" href="structComplex.html">Complex</a> rot1, rot2;</div>
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  </div>
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  <span class="keywordtype">int</span> rankIsUpper;</div>
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></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="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  <a class="code" href="QuEST__cpu_8c.html#ab19f28e68330da68ea3caa2bdef32da9">statevec_multiControlledUnitaryLocal</a>(qureg, targetQubit, ctrlQubitsMask, ctrlFlipMask, u);</div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</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="l01027"></a><span class="lineno"> 1027</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a5c9b2f129bdffaaba9857f6eddecbb17">getRotAngleFromUnitaryMatrix</a>(rankIsUpper, &rot1, &rot2, u);</div>
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</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="l01029"></a><span class="lineno"> 1029</span>  </div>
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  </div>
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</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="l01034"></a><span class="lineno"> 1034</span>  <span class="comment">// in the correct order</span></div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <a class="code" href="QuEST__cpu_8c.html#ab58fe4be895283c2c4eb86ec9af5682e">statevec_multiControlledUnitaryDistributed</a>(qureg,targetQubit,ctrlQubitsMask,ctrlFlipMask,rot1,rot2,</div>
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <a class="code" href="QuEST__cpu_8c.html#ab58fe4be895283c2c4eb86ec9af5682e">statevec_multiControlledUnitaryDistributed</a>(qureg,targetQubit,ctrlQubitsMask,ctrlFlipMask,rot1,rot2,</div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  }</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  }</div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00241">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00493">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00317">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00297">getRotAngleFromUnitaryMatrix()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02542">statevec_multiControlledUnitaryDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02268">statevec_multiControlledUnitaryLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00373">multiControlledUnitary()</a>, <a class="el" href="QuEST_8c_source.html#l00388">multiStateControlledUnitary()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00453">statevec_multiControlledMultiRotatePauli()</a>.</p>
</div>
</div>
<a id="a7a76950824f17e821415070a4bfdad5b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7a76950824f17e821415070a4bfdad5b">◆ </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">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#l00573">573</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="l00573"></a><span class="lineno"> 573</span>  {</div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  </div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ctrlMask = 0;</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <a class="code" href="QuEST__internal_8h.html#a0acfe30083d0bc2a84da196378a36122">statevec_multiControlledMultiQubitUnitary</a>(qureg, ctrlMask, targets, numTargets, u);</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01514">statevec_multiControlledMultiQubitUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01103">applyMatrixN()</a>, and <a class="el" href="QuEST_8c_source.html#l00296">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#l00414">414</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="l00417"></a><span class="lineno"> 417</span>  {</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> fac = 1/sqrt(2);</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</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="l00420"></a><span class="lineno"> 420</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="l00421"></a><span class="lineno"> 421</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="l00422"></a><span class="lineno"> 422</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="l00423"></a><span class="lineno"> 423</span>  </div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="comment">// mask may be modified to remove superfluous Identity ops</span></div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</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#acc45bb8300922ea5933e294921e25ea2">getQubitBitMask</a>(targetQubits, numTargets);</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="comment">// rotate basis so that exp(Z) will effect exp(Y) and exp(X)</span></div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t < numTargets; t++) {</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#gga1c703cf89629e4e9c7023cd402d67028a63800f45b01ccc2608f754aee850bf4a">PAULI_I</a>)</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  mask -= 1LL << targetQubits[t]; <span class="comment">// remove target from mask</span></div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</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="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="QuEST__internal_8h.html#aec63559e8b9ab0e17efe18d64d2ceca6">statevec_compactUnitary</a>(qureg, targetQubits[t], uRyAlpha, uRyBeta);</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</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="l00434"></a><span class="lineno"> 434</span>  <a class="code" href="QuEST__internal_8h.html#aec63559e8b9ab0e17efe18d64d2ceca6">statevec_compactUnitary</a>(qureg, targetQubits[t], uRxAlpha, uRxBeta);</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="comment">// (targetPaulis[t] == 3) is Z basis</span></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>  </div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="comment">// does nothing if there are no qubits to 'rotate'</span></div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">if</span> (mask != 0)</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <a class="code" href="QuEST__internal_8h.html#a8d88b4ed94ab024e5e7b2f1f4f505b44">statevec_multiRotateZ</a>(qureg, mask, (applyConj)? -angle : angle);</div>
<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>  <span class="comment">// undo X and Y basis rotations</span></div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  uRxBeta.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> *= -1;</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  uRyBeta.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> *= -1;</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t=0; t < numTargets; t++) {</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</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="l00447"></a><span class="lineno"> 447</span>  <a class="code" href="QuEST__internal_8h.html#aec63559e8b9ab0e17efe18d64d2ceca6">statevec_compactUnitary</a>(qureg, targetQubits[t], uRyAlpha, uRyBeta);</div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</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="l00449"></a><span class="lineno"> 449</span>  <a class="code" href="QuEST__internal_8h.html#aec63559e8b9ab0e17efe18d64d2ceca6">statevec_compactUnitary</a>(qureg, targetQubits[t], uRxAlpha, uRxBeta);</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  }</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00050">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#l00858">statevec_compactUnitary()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l03316">statevec_multiRotateZ()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00765">applyExponentiatedPauliHamil()</a>, and <a class="el" href="QuEST_8c_source.html#l00685">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#l03316">3316</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="l03317"></a><span class="lineno"> 3317</span> {</div>
<div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</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>  <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="l03322"></a><span class="lineno"> 3322</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="l03323"></a><span class="lineno"> 3323</span>  </div>
<div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03325"></a><span class="lineno"> 3325</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="l03326"></a><span class="lineno"> 3326</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="l03327"></a><span class="lineno"> 3327</span>  </div>
<div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> stateReal, stateImag;</div>
<div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> cosAngle = cos(angle/2.0);</div>
<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> sinAngle = sin(angle/2.0); </div>
<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>  </div>
<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>  <span class="comment">// = +-1, to flip sinAngle based on target qubit parity, to effect</span></div>
<div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>  <span class="comment">// exp(-angle/2 i fac_j)|j></span></div>
<div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>  <span class="keywordtype">int</span> fac; </div>
<div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>  </div>
<div class="line"><a name="l03336"></a><span class="lineno"> 3336</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03337"></a><span class="lineno"> 3337</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l03338"></a><span class="lineno"> 3338</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l03339"></a><span class="lineno"> 3339</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal, stateVecImag, mask, chunkId,chunkSize,cosAngle,sinAngle) \</span></div>
<div class="line"><a name="l03340"></a><span class="lineno"> 3340</span> <span class="preprocessor"> private (index, fac, stateReal, stateImag)</span></div>
<div class="line"><a name="l03341"></a><span class="lineno"> 3341</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>  {</div>
<div class="line"><a name="l03343"></a><span class="lineno"> 3343</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03344"></a><span class="lineno"> 3344</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l03345"></a><span class="lineno"> 3345</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>  stateReal = stateVecReal[index];</div>
<div class="line"><a name="l03348"></a><span class="lineno"> 3348</span>  stateImag = stateVecImag[index];</div>
<div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>  </div>
<div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>  <span class="comment">// odd-parity target qubits get fac_j = -1</span></div>
<div class="line"><a name="l03351"></a><span class="lineno"> 3351</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="l03352"></a><span class="lineno"> 3352</span>  stateVecReal[index] = cosAngle*stateReal + fac * sinAngle*stateImag;</div>
<div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>  stateVecImag[index] = - fac * sinAngle*stateReal + cosAngle*stateImag; </div>
<div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>  }</div>
<div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>  }</div>
<div class="line"><a name="l03356"></a><span class="lineno"> 3356</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03307">getBitMaskParity()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00652">multiRotateZ()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00414">statevec_multiRotatePauli()</a>.</p>
</div>
</div>
<a id="a1c82b5e914a8a39c5c7b782dbc16fa76"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1c82b5e914a8a39c5c7b782dbc16fa76">◆ </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">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#l01048">1048</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="l01049"></a><span class="lineno"> 1049</span> {</div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</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="l01051"></a><span class="lineno"> 1051</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="l01052"></a><span class="lineno"> 1052</span>  </div>
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  <span class="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  <span class="keywordtype">int</span> rankIsUpper;</div>
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  </div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  <a class="code" href="QuEST__cpu_8c.html#aa987d1e0ba97da2ca540194356dd62de">statevec_pauliXLocal</a>(qureg, targetQubit);</div>
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</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="l01063"></a><span class="lineno"> 1063</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="l01064"></a><span class="lineno"> 1064</span>  <span class="comment">//printf("%d rank has pair rank: %d\n", qureg.rank, pairRank);</span></div>
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</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="l01068"></a><span class="lineno"> 1068</span>  <span class="comment">// this rank's values with pair values</span></div>
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  <a class="code" href="QuEST__cpu_8c.html#a464efbd1d7ca5a7b25c83ada001955c2">statevec_pauliXDistributed</a>(qureg,</div>
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">// in</span></div>
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">// out</span></div>
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  }</div>
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00241">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00493">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00317">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02651">statevec_pauliXDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02593">statevec_pauliXLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00432">pauliX()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00495">statevec_applyPauliProd()</a>.</p>
</div>
</div>
<a id="af1cca787f3b0e0c91ffb2495f9ad8d5a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af1cca787f3b0e0c91ffb2495f9ad8d5a">◆ </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">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>  <a class="code" href="QuEST__cpu_8c.html#a45b0916c3e121837f214b64f7424e479">statevec_pauliYLocal</a>(qureg, targetQubit, conjFac);</div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</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="l01156"></a><span class="lineno"> 1156</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="l01157"></a><span class="lineno"> 1157</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</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="l01160"></a><span class="lineno"> 1160</span>  <a class="code" href="QuEST__cpu_8c.html#a0f562af6cb665a8a7a3f80e9449734d5">statevec_pauliYDistributed</a>(qureg,</div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">// in</span></div>
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">// out</span></div>
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  rankIsUpper, conjFac);</div>
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  }</div>
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00241">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00493">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00317">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02945">statevec_pauliYDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02887">statevec_pauliYLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00443">pauliY()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00495">statevec_applyPauliProd()</a>.</p>
</div>
</div>
<a id="a81fbd2eccd0d0e5a3cece4df2f96cb92"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a81fbd2eccd0d0e5a3cece4df2f96cb92">◆ </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">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#l01167">1167</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="l01168"></a><span class="lineno"> 1168</span> { </div>
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  <span class="keywordtype">int</span> conjFac = -1;</div>
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>  </div>
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</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="l01172"></a><span class="lineno"> 1172</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="l01173"></a><span class="lineno"> 1173</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="l01174"></a><span class="lineno"> 1174</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  </div>
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  <a class="code" href="QuEST__cpu_8c.html#a45b0916c3e121837f214b64f7424e479">statevec_pauliYLocal</a>(qureg, targetQubit, conjFac);</div>
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</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="l01181"></a><span class="lineno"> 1181</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="l01182"></a><span class="lineno"> 1182</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</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="l01185"></a><span class="lineno"> 1185</span>  <a class="code" href="QuEST__cpu_8c.html#a0f562af6cb665a8a7a3f80e9449734d5">statevec_pauliYDistributed</a>(qureg,</div>
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">// in</span></div>
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">// out</span></div>
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  rankIsUpper, conjFac);</div>
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>  }</div>
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00241">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00493">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00317">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02945">statevec_pauliYDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02887">statevec_pauliYLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00443">pauliY()</a>.</p>
</div>
</div>
<a id="ab14df201e5c05527dc77cfeb6f583042"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab14df201e5c05527dc77cfeb6f583042">◆ </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">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#l00261">261</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="l00261"></a><span class="lineno"> 261</span>  {</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <a class="code" href="structComplex.html">Complex</a> term; </div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  term.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = -1;</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  term.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = 0;</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <a class="code" href="QuEST__internal_8h.html#a535cc3c9962d511078691e4d64b4e272">statevec_phaseShiftByTerm</a>(qureg, targetQubit, term);</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</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#l03185">statevec_phaseShiftByTerm()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00454">pauliZ()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00495">statevec_applyPauliProd()</a>.</p>
</div>
</div>
<a id="a5ef139196852f92fe8271c82964eadff"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5ef139196852f92fe8271c82964eadff">◆ </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">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#l00254">254</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="l00254"></a><span class="lineno"> 254</span>  {</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <a class="code" href="structComplex.html">Complex</a> term; </div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  term.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = cos(angle); </div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  term.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = sin(angle);</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <a class="code" href="QuEST__internal_8h.html#a535cc3c9962d511078691e4d64b4e272">statevec_phaseShiftByTerm</a>(qureg, targetQubit, term);</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</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#l03185">statevec_phaseShiftByTerm()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00487">phaseShift()</a>.</p>
</div>
</div>
<a id="a535cc3c9962d511078691e4d64b4e272"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a535cc3c9962d511078691e4d64b4e272">◆ </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">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#l03185">3185</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="l03186"></a><span class="lineno"> 3186</span> { </div>
<div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> stateVecSize;</div>
<div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>  <span class="keywordtype">int</span> targetBit;</div>
<div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>  </div>
<div class="line"><a name="l03191"></a><span class="lineno"> 3191</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="l03192"></a><span class="lineno"> 3192</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="l03193"></a><span class="lineno"> 3193</span>  </div>
<div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>  <span class="comment">// dimension of the state vector</span></div>
<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>  stateVecSize = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l03196"></a><span class="lineno"> 3196</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="l03197"></a><span class="lineno"> 3197</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="l03198"></a><span class="lineno"> 3198</span>  </div>
<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> stateRealLo, stateImagLo;</div>
<div class="line"><a name="l03200"></a><span class="lineno"> 3200</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="l03201"></a><span class="lineno"> 3201</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="l03202"></a><span class="lineno"> 3202</span>  </div>
<div class="line"><a name="l03203"></a><span class="lineno"> 3203</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l03204"></a><span class="lineno"> 3204</span> <span class="preprocessor"># pragma omp parallel for \</span></div>
<div class="line"><a name="l03205"></a><span class="lineno"> 3205</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l03206"></a><span class="lineno"> 3206</span> <span class="preprocessor"> shared (stateVecSize, stateVecReal,stateVecImag, cosAngle,sinAngle, \</span></div>
<div class="line"><a name="l03207"></a><span class="lineno"> 3207</span> <span class="preprocessor"> chunkId,chunkSize,targetQubit) \</span></div>
<div class="line"><a name="l03208"></a><span class="lineno"> 3208</span> <span class="preprocessor"> private (index,targetBit,stateRealLo,stateImagLo) \</span></div>
<div class="line"><a name="l03209"></a><span class="lineno"> 3209</span> <span class="preprocessor"> schedule (static)</span></div>
<div class="line"><a name="l03210"></a><span class="lineno"> 3210</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>  <span class="keywordflow">for</span> (index=0; index<stateVecSize; index++) {</div>
<div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>  </div>
<div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>  <span class="comment">// update the coeff of the |1> state of the target qubit</span></div>
<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>  targetBit = <a class="code" href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a> (targetQubit, index+chunkId*chunkSize);</div>
<div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>  <span class="keywordflow">if</span> (targetBit) {</div>
<div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>  </div>
<div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>  stateRealLo = stateVecReal[index];</div>
<div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>  stateImagLo = stateVecImag[index];</div>
<div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>  </div>
<div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>  stateVecReal[index] = cosAngle*stateRealLo - sinAngle*stateImagLo;</div>
<div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>  stateVecImag[index] = sinAngle*stateRealLo + cosAngle*stateImagLo; </div>
<div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>  }</div>
<div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>  }</div>
<div class="line"><a name="l03224"></a><span class="lineno"> 3224</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">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#l00332">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#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00261">statevec_pauliZ()</a>, <a class="el" href="QuEST__common_8c_source.html#l00254">statevec_phaseShift()</a>, <a class="el" href="QuEST__common_8c_source.html#l00268">statevec_sGate()</a>, <a class="el" href="QuEST__common_8c_source.html#l00282">statevec_sGateConj()</a>, <a class="el" href="QuEST__common_8c_source.html#l00275">statevec_tGate()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00289">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#l01439">1439</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> index;</div>
<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>  <span class="keywordtype">int</span> rank;</div>
<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#a0a86e8a50ea8c998b4a0a6640c5a1218">numQubitsInStateVec</a><=5){</div>
<div class="line"><a name="l01443"></a><span class="lineno"> 1443</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="l01444"></a><span class="lineno"> 1444</span>  <span class="keywordflow">if</span> (qureg.<a class="code" href="structQureg.html#ac2929e681d3d95591c18cf168dbbe4f0">chunkId</a>==rank){</div>
<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>  <span class="keywordflow">if</span> (reportRank) {</div>
<div class="line"><a name="l01446"></a><span class="lineno"> 1446</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="l01447"></a><span class="lineno"> 1447</span>  printf(<span class="stringliteral">"real, imag\n"</span>);</div>
<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rank==0) {</div>
<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>  printf(<span class="stringliteral">"Reporting state [\n"</span>);</div>
<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>  printf(<span class="stringliteral">"real, imag\n"</span>);</div>
<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>  }</div>
<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>  </div>
<div class="line"><a name="l01453"></a><span class="lineno"> 1453</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="l01454"></a><span class="lineno"> 1454</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="l01455"></a><span class="lineno"> 1455</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="l01456"></a><span class="lineno"> 1456</span>  }</div>
<div class="line"><a name="l01457"></a><span class="lineno"> 1457</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="l01458"></a><span class="lineno"> 1458</span>  }</div>
<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>  <a class="code" href="group__debug.html#ga8d31fe2d1ad4d01e2a1f5f6b8bc15b77">syncQuESTEnv</a>(env);</div>
<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>  }</div>
<div class="line"><a name="l01461"></a><span class="lineno"> 1461</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="l01462"></a><span class="lineno"> 1462</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00529">copyStateFromGPU()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00338">Qureg::numChunks</a>, <a class="el" href="QuEST_8h_source.html#l00329">Qureg::numQubitsInStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00164">syncQuESTEnv()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01594">reportStateToScreen()</a>.</p>
</div>
</div>
<a id="adf5fbea75826cde7d86fd7c31bcf3dec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adf5fbea75826cde7d86fd7c31bcf3dec">◆ </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">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#l00314">314</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="l00314"></a><span class="lineno"> 314</span>  {</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  </div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <a class="code" href="structComplex.html">Complex</a> alpha, beta;</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <a class="code" href="QuEST__common_8c.html#a71b3ae4402c1c5039d3086ca0e47a522">getComplexPairFromRotation</a>(angle, axis, &alpha, &beta);</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <a class="code" href="QuEST__internal_8h.html#aec63559e8b9ab0e17efe18d64d2ceca6">statevec_compactUnitary</a>(qureg, rotQubit, alpha, beta);</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00120">getComplexPairFromRotation()</a>, and <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00858">statevec_compactUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00601">rotateAroundAxis()</a>, <a class="el" href="QuEST__common_8c_source.html#l00296">statevec_rotateX()</a>, <a class="el" href="QuEST__common_8c_source.html#l00302">statevec_rotateY()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00308">statevec_rotateZ()</a>.</p>
</div>
</div>
<a id="a2cbfe9f416d4d8acb56213841f62cb53"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2cbfe9f416d4d8acb56213841f62cb53">◆ </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">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#l00321">321</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="l00321"></a><span class="lineno"> 321</span>  {</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  </div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="structComplex.html">Complex</a> alpha, beta;</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <a class="code" href="QuEST__common_8c.html#a71b3ae4402c1c5039d3086ca0e47a522">getComplexPairFromRotation</a>(angle, axis, &alpha, &beta);</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  alpha.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> *= -1; </div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  beta.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> *= -1;</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <a class="code" href="QuEST__internal_8h.html#aec63559e8b9ab0e17efe18d64d2ceca6">statevec_compactUnitary</a>(qureg, rotQubit, alpha, beta);</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00120">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#l00858">statevec_compactUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00601">rotateAroundAxis()</a>.</p>
</div>
</div>
<a id="ab8687e6ea5cf35503c223051837f3b94"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab8687e6ea5cf35503c223051837f3b94">◆ </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">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#l00296">296</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="l00296"></a><span class="lineno"> 296</span>  {</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  </div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <a class="code" href="structVector.html">Vector</a> unitAxis = {1, 0, 0};</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <a class="code" href="QuEST__common_8c.html#adf5fbea75826cde7d86fd7c31bcf3dec">statevec_rotateAroundAxis</a>(qureg, rotQubit, angle, unitAxis);</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00314">statevec_rotateAroundAxis()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00187">rotateX()</a>.</p>
</div>
</div>
<a id="a1f0db2800d13b6c2b120e05129cd13cb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1f0db2800d13b6c2b120e05129cd13cb">◆ </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">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#l00302">302</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="l00302"></a><span class="lineno"> 302</span>  {</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  </div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <a class="code" href="structVector.html">Vector</a> unitAxis = {0, 1, 0};</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <a class="code" href="QuEST__common_8c.html#adf5fbea75826cde7d86fd7c31bcf3dec">statevec_rotateAroundAxis</a>(qureg, rotQubit, angle, unitAxis);</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00314">statevec_rotateAroundAxis()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00198">rotateY()</a>.</p>
</div>
</div>
<a id="a2b2b8c69566a49cdf4a3fa2cb4f5e03c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2b2b8c69566a49cdf4a3fa2cb4f5e03c">◆ </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">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#l00308">308</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="l00308"></a><span class="lineno"> 308</span>  {</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  </div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <a class="code" href="structVector.html">Vector</a> unitAxis = {0, 0, 1};</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <a class="code" href="QuEST__common_8c.html#adf5fbea75826cde7d86fd7c31bcf3dec">statevec_rotateAroundAxis</a>(qureg, rotQubit, angle, unitAxis);</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__common_8c_source.html#l00314">statevec_rotateAroundAxis()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00209">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#l01248">1248</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="l01248"></a><span class="lineno"> 1248</span>  {</div>
<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  </div>
<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  <span class="comment">/* this is actually distributed, since the user's code runs on every node */</span></div>
<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  </div>
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</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="l01253"></a><span class="lineno"> 1253</span>  <span class="comment">// these may be negative or above qureg.numAmpsPerChunk</span></div>
<div class="line"><a name="l01254"></a><span class="lineno"> 1254</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="l01255"></a><span class="lineno"> 1255</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="l01256"></a><span class="lineno"> 1256</span>  </div>
<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  <span class="comment">// add this to a local index to get corresponding elem in reals & imags</span></div>
<div class="line"><a name="l01258"></a><span class="lineno"> 1258</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="l01259"></a><span class="lineno"> 1259</span>  </div>
<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  <span class="comment">// restrict these indices to fit into this chunk</span></div>
<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  <span class="keywordflow">if</span> (localStartInd < 0)</div>
<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  localStartInd = 0;</div>
<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>  <span class="keywordflow">if</span> (localEndInd > qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>)</div>
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  localEndInd = qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>  <span class="comment">// they may now be out of order = no iterations</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="comment">// unpacking OpenMP vars</span></div>
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</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="l01270"></a><span class="lineno"> 1270</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="l01271"></a><span class="lineno"> 1271</span>  </div>
<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <span class="preprocessor"> default (none) \</span></div>
<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> <span class="preprocessor"> shared (localStartInd,localEndInd, vecRe,vecIm, reals,imags, offset) \</span></div>
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <span class="preprocessor"> private (index) </span></div>
<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  {</div>
<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  <span class="comment">// iterate these local inds - this might involve no iterations</span></div>
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  <span class="keywordflow">for</span> (index=localStartInd; index < localEndInd; index++) {</div>
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  vecRe[index] = reals[index + offset];</div>
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  vecIm[index] = imags[index + offset];</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> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST_8h_source.html#l00346">Qureg::deviceStateVec</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, and <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00157">initStateFromAmps()</a>, <a class="el" href="QuEST_8c_source.html#l01021">setAmps()</a>, and <a class="el" href="QuEST_8c_source.html#l01030">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#l04005">4005</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="l04005"></a><span class="lineno"> 4005</span>  {</div>
<div class="line"><a name="l04006"></a><span class="lineno"> 4006</span>  </div>
<div class="line"><a name="l04007"></a><span class="lineno"> 4007</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="l04008"></a><span class="lineno"> 4008</span>  </div>
<div class="line"><a name="l04009"></a><span class="lineno"> 4009</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="l04010"></a><span class="lineno"> 4010</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="l04011"></a><span class="lineno"> 4011</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="l04012"></a><span class="lineno"> 4012</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="l04013"></a><span class="lineno"> 4013</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="l04014"></a><span class="lineno"> 4014</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="l04015"></a><span class="lineno"> 4015</span>  </div>
<div class="line"><a name="l04016"></a><span class="lineno"> 4016</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="l04017"></a><span class="lineno"> 4017</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="l04018"></a><span class="lineno"> 4018</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="l04019"></a><span class="lineno"> 4019</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="l04020"></a><span class="lineno"> 4020</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="l04021"></a><span class="lineno"> 4021</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="l04022"></a><span class="lineno"> 4022</span>  </div>
<div class="line"><a name="l04023"></a><span class="lineno"> 4023</span>  <a class="code" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a> re1,im1, re2,im2, reOut,imOut;</div>
<div class="line"><a name="l04024"></a><span class="lineno"> 4024</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> index;</div>
<div class="line"><a name="l04025"></a><span class="lineno"> 4025</span>  </div>
<div class="line"><a name="l04026"></a><span class="lineno"> 4026</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l04027"></a><span class="lineno"> 4027</span> <span class="preprocessor"># pragma omp parallel \</span></div>
<div class="line"><a name="l04028"></a><span class="lineno"> 4028</span> <span class="preprocessor"> shared (vecRe1,vecIm1, vecRe2,vecIm2, vecReOut,vecImOut, facRe1,facIm1,facRe2,facIm2, numAmps) \</span></div>
<div class="line"><a name="l04029"></a><span class="lineno"> 4029</span> <span class="preprocessor"> private (index, re1,im1, re2,im2, reOut,imOut)</span></div>
<div class="line"><a name="l04030"></a><span class="lineno"> 4030</span> <span class="preprocessor"># endif </span></div>
<div class="line"><a name="l04031"></a><span class="lineno"> 4031</span>  {</div>
<div class="line"><a name="l04032"></a><span class="lineno"> 4032</span> <span class="preprocessor"># ifdef _OPENMP</span></div>
<div class="line"><a name="l04033"></a><span class="lineno"> 4033</span> <span class="preprocessor"># pragma omp for schedule (static)</span></div>
<div class="line"><a name="l04034"></a><span class="lineno"> 4034</span> <span class="preprocessor"># endif</span></div>
<div class="line"><a name="l04035"></a><span class="lineno"> 4035</span>  <span class="keywordflow">for</span> (index=0LL; index<numAmps; index++) {</div>
<div class="line"><a name="l04036"></a><span class="lineno"> 4036</span>  re1 = vecRe1[index]; im1 = vecIm1[index];</div>
<div class="line"><a name="l04037"></a><span class="lineno"> 4037</span>  re2 = vecRe2[index]; im2 = vecIm2[index];</div>
<div class="line"><a name="l04038"></a><span class="lineno"> 4038</span>  reOut = vecReOut[index];</div>
<div class="line"><a name="l04039"></a><span class="lineno"> 4039</span>  imOut = vecImOut[index];</div>
<div class="line"><a name="l04040"></a><span class="lineno"> 4040</span>  </div>
<div class="line"><a name="l04041"></a><span class="lineno"> 4041</span>  vecReOut[index] = (facReOut*reOut - facImOut*imOut) + (facRe1*re1 - facIm1*im1) + (facRe2*re2 - facIm2*im2);</div>
<div class="line"><a name="l04042"></a><span class="lineno"> 4042</span>  vecImOut[index] = (facReOut*imOut + facImOut*reOut) + (facRe1*im1 + facIm1*re1) + (facRe2*im2 + facIm2*re2);</div>
<div class="line"><a name="l04043"></a><span class="lineno"> 4043</span>  }</div>
<div class="line"><a name="l04044"></a><span class="lineno"> 4044</span>  }</div>
<div class="line"><a name="l04045"></a><span class="lineno"> 4045</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#l00332">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#l00341">Qureg::stateVec</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01037">setWeightedQureg()</a>, and <a class="el" href="QuEST__common_8c_source.html#l00538">statevec_applyPauliSum()</a>.</p>
</div>
</div>
<a id="a559d175d31cec552fc09aec3e8a78d11"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a559d175d31cec552fc09aec3e8a78d11">◆ </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">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#l00268">268</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="l00268"></a><span class="lineno"> 268</span>  {</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <a class="code" href="structComplex.html">Complex</a> term; </div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  term.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = 0;</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  term.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = 1;</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="QuEST__internal_8h.html#a535cc3c9962d511078691e4d64b4e272">statevec_phaseShiftByTerm</a>(qureg, targetQubit, term);</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</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#l03185">statevec_phaseShiftByTerm()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00465">sGate()</a>.</p>
</div>
</div>
<a id="a142b424d903dfaca7a7ac166076f543a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a142b424d903dfaca7a7ac166076f543a">◆ </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">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#l00282">282</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="l00282"></a><span class="lineno"> 282</span>  {</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <a class="code" href="structComplex.html">Complex</a> term; </div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  term.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = 0;</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  term.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = -1;</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <a class="code" href="QuEST__internal_8h.html#a535cc3c9962d511078691e4d64b4e272">statevec_phaseShiftByTerm</a>(qureg, targetQubit, term);</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</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#l03185">statevec_phaseShiftByTerm()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00465">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#l00387">387</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="l00387"></a><span class="lineno"> 387</span>  {</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  </div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</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="l00390"></a><span class="lineno"> 390</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[0][0]=1;</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[3][3]=1;</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</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="l00393"></a><span class="lineno"> 393</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="l00394"></a><span class="lineno"> 394</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="l00395"></a><span class="lineno"> 395</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="l00396"></a><span class="lineno"> 396</span>  </div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <a class="code" href="QuEST__common_8c.html#a95abbe0cedf45b1ff2f070dba219fd7f">statevec_twoQubitUnitary</a>(qureg, qb1, qb2, u);</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00178">ComplexMatrix4::imag</a>, <a class="el" href="QuEST_8h_source.html#l00177">ComplexMatrix4::real</a>, and <a class="el" href="QuEST__common_8c_source.html#l00561">statevec_twoQubitUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00639">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#l00400">400</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="l00400"></a><span class="lineno"> 400</span>  {</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  </div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</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="l00403"></a><span class="lineno"> 403</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[0][0]=1;</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  u.<a class="code" href="structComplexMatrix4.html#aeadc9893e1b16cdd585dac523e73926c">real</a>[3][3]=1;</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</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="l00406"></a><span class="lineno"> 406</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="l00407"></a><span class="lineno"> 407</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="l00408"></a><span class="lineno"> 408</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="l00409"></a><span class="lineno"> 409</span>  </div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <a class="code" href="QuEST__common_8c.html#a95abbe0cedf45b1ff2f070dba219fd7f">statevec_twoQubitUnitary</a>(qureg, qb1, qb2, u);</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00178">ComplexMatrix4::imag</a>, <a class="el" href="QuEST_8h_source.html#l00177">ComplexMatrix4::real</a>, and <a class="el" href="QuEST__common_8c_source.html#l00561">statevec_twoQubitUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00639">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#l01431">1431</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="l01431"></a><span class="lineno"> 1431</span>  {</div>
<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>  </div>
<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>  <span class="comment">// perform locally if possible </span></div>
<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>  <span class="keywordtype">int</span> qbBig = (qb1 > qb2)? qb1 : qb2;</div>
<div class="line"><a name="l01435"></a><span class="lineno"> 1435</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="l01436"></a><span class="lineno"> 1436</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="l01437"></a><span class="lineno"> 1437</span>  </div>
<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>  <span class="comment">// do nothing if this node contains no amplitudes to swap</span></div>
<div class="line"><a name="l01439"></a><span class="lineno"> 1439</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="l01440"></a><span class="lineno"> 1440</span>  <span class="keywordflow">if</span> (oddParityGlobalInd == -1)</div>
<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>  <span class="keywordflow">return</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">// determine and swap amps with pair node</span></div>
<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>  <span class="keywordtype">int</span> pairRank = <a class="code" href="QuEST__gpu_8cu.html#ae1b7788cf504ec3d79de3855f97929c7">flipBit</a>(<a class="code" href="QuEST__gpu_8cu.html#ae1b7788cf504ec3d79de3855f97929c7">flipBit</a>(oddParityGlobalInd, qb1), qb2) / qureg.<a class="code" href="structQureg.html#ab0ea0358482b62f43fdd781469607d97">numAmpsPerChunk</a>;</div>
<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>  <a class="code" href="QuEST__cpu_8c.html#abe74a5a9db8340e37b80fbc77338894d">statevec_swapQubitAmpsDistributed</a>(qureg, pairRank, qb1, qb2);</div>
<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00493">exchangeStateVectors()</a>, <a class="el" href="QuEST__gpu_8cu_source.html#l00095">flipBit()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01412">getGlobalIndOfOddParityInChunk()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST__cpu_8c_source.html#l03965">statevec_swapQubitAmpsDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l03922">statevec_swapQubitAmpsLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST__common_8c_source.html#l00849">agnostic_applyQFT()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01514">statevec_multiControlledMultiQubitUnitary()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01458">statevec_multiControlledTwoQubitUnitary()</a>, and <a class="el" href="QuEST_8c_source.html#l00627">swapGate()</a>.</p>
</div>
</div>
<a id="a2d96b4601cc3a9e1221e11a366fe1699"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2d96b4601cc3a9e1221e11a366fe1699">◆ </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">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#l00275">275</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="l00275"></a><span class="lineno"> 275</span>  {</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <a class="code" href="structComplex.html">Complex</a> term; </div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  term.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = 1/sqrt(2);</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  term.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = 1/sqrt(2);</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <a class="code" href="QuEST__internal_8h.html#a535cc3c9962d511078691e4d64b4e272">statevec_phaseShiftByTerm</a>(qureg, targetQubit, term);</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</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#l03185">statevec_phaseShiftByTerm()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00476">tGate()</a>.</p>
</div>
</div>
<a id="a086fffa88b1aeec1405aa2dc41eab8a3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a086fffa88b1aeec1405aa2dc41eab8a3">◆ </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">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#l00289">289</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="l00289"></a><span class="lineno"> 289</span>  {</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <a class="code" href="structComplex.html">Complex</a> term; </div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  term.<a class="code" href="structComplex.html#ab5b2e2eca02131fc74b289a83636cbe3">real</a> = 1/sqrt(2);</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  term.<a class="code" href="structComplex.html#a84f5439aad0ef495efdd3b4c1c02d27e">imag</a> = -1/sqrt(2);</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <a class="code" href="QuEST__internal_8h.html#a535cc3c9962d511078691e4d64b4e272">statevec_phaseShiftByTerm</a>(qureg, targetQubit, term);</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</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#l03185">statevec_phaseShiftByTerm()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l00476">tGate()</a>.</p>
</div>
</div>
<a id="a95abbe0cedf45b1ff2f070dba219fd7f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a95abbe0cedf45b1ff2f070dba219fd7f">◆ </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">int </td>
<td class="paramname"><em>targetQubit1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">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#l00561">561</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="l00561"></a><span class="lineno"> 561</span>  {</div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  </div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <span class="keywordtype">long</span> <span class="keywordtype">long</span> <span class="keywordtype">int</span> ctrlMask = 0;</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <a class="code" href="QuEST__internal_8h.html#a3eadcb581f2623e21e4967f791d0439c">statevec_multiControlledTwoQubitUnitary</a>(qureg, ctrlMask, targetQubit1, targetQubit2, u);</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST__cpu__distributed_8c_source.html#l01458">statevec_multiControlledTwoQubitUnitary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01093">applyMatrix4()</a>, <a class="el" href="QuEST__common_8c_source.html#l00387">statevec_sqrtSwapGate()</a>, <a class="el" href="QuEST__common_8c_source.html#l00400">statevec_sqrtSwapGateConj()</a>, and <a class="el" href="QuEST_8c_source.html#l00256">twoQubitUnitary()</a>.</p>
</div>
</div>
<a id="ac3735bd959600e57b2ee3a105666cddf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac3735bd959600e57b2ee3a105666cddf">◆ </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">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#l00895">895</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="l00896"></a><span class="lineno"> 896</span> {</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</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="l00898"></a><span class="lineno"> 898</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="l00899"></a><span class="lineno"> 899</span>  <a class="code" href="structComplex.html">Complex</a> rot1, rot2;</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="comment">// rank's chunk is in upper half of block </span></div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <span class="keywordtype">int</span> rankIsUpper;</div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <span class="keywordtype">int</span> pairRank; <span class="comment">// rank of corresponding chunk</span></div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  </div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  <span class="keywordflow">if</span> (useLocalDataOnly){</div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="comment">// all values required to update state vector lie in this rank</span></div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <a class="code" href="QuEST__cpu_8c.html#aafc398f8f479fcc066a2dea700235635">statevec_unitaryLocal</a>(qureg, targetQubit, u);</div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <span class="comment">// need to get corresponding chunk of state vector from other rank</span></div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</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="l00911"></a><span class="lineno"> 911</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#a5c9b2f129bdffaaba9857f6eddecbb17">getRotAngleFromUnitaryMatrix</a>(rankIsUpper, &rot1, &rot2, u);</div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</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="l00913"></a><span class="lineno"> 913</span>  <span class="comment">// get corresponding values from my pair</span></div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <a class="code" href="QuEST__cpu__distributed_8c.html#ae01c3eb75fd32de1a7e1dbc7a33a21e3">exchangeStateVectors</a>(qureg, pairRank);</div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  </div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</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="l00917"></a><span class="lineno"> 917</span>  <span class="comment">// send values to compactUnitaryDistributed in the correct order</span></div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="keywordflow">if</span> (rankIsUpper){</div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <a class="code" href="QuEST__cpu_8c.html#a0ce2c2fd54df25495e99dc5b95bed4b2">statevec_unitaryDistributed</a>(qureg,rot1,rot2,</div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  <a class="code" href="QuEST__cpu_8c.html#a0ce2c2fd54df25495e99dc5b95bed4b2">statevec_unitaryDistributed</a>(qureg,rot1,rot2,</div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  qureg.<a class="code" href="structQureg.html#aba97773694870ef35e378c036f486bb7">pairStateVec</a>, <span class="comment">//upper</span></div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>, <span class="comment">//lower</span></div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  qureg.<a class="code" href="structQureg.html#a441e4cacef6bd17adb9813c7442d42fe">stateVec</a>); <span class="comment">//output</span></div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  }</div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  }</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</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> }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="QuEST_8h_source.html#l00336">Qureg::chunkId</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00241">chunkIsUpper()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00493">exchangeStateVectors()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00317">getChunkPairId()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00297">getRotAngleFromUnitaryMatrix()</a>, <a class="el" href="QuEST__cpu__distributed_8c_source.html#l00370">halfMatrixBlockFitsInChunk()</a>, <a class="el" href="QuEST_8h_source.html#l00332">Qureg::numAmpsPerChunk</a>, <a class="el" href="QuEST_8h_source.html#l00343">Qureg::pairStateVec</a>, <a class="el" href="group__type.html#ga7740e349b4f8bae6451547680f0ce2d6">qreal</a>, <a class="el" href="QuEST_8h_source.html#l00341">Qureg::stateVec</a>, <a class="el" href="QuEST__cpu_8c_source.html#l02151">statevec_unitaryDistributed()</a>, and <a class="el" href="QuEST__cpu_8c_source.html#l02026">statevec_unitaryLocal()</a>.</p>
<p class="reference">Referenced by <a class="el" href="QuEST_8c_source.html#l01084">applyMatrix2()</a>, and <a class="el" href="QuEST_8c_source.html#l00348">unitary()</a>.</p>
</div>
</div>
</div><!-- contents -->
<div class="ttc" id="agroup__type_html_ggaa7d869b117ba5024d6b84938e8cdfc65acb26952815118f5ced7703302dbeb556"><div class="ttname"><a href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65acb26952815118f5ced7703302dbeb556">INVERSE_PRODUCT</a></div><div class="ttdeci">@ INVERSE_PRODUCT</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00233">QuEST.h:233</a></div></div>
<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#l00198">QuEST.h:198</a></div></div>
<div class="ttc" id="agroup__type_html_ga1c703cf89629e4e9c7023cd402d67028"><div class="ttname"><a href="group__type.html#ga1c703cf89629e4e9c7023cd402d67028">pauliOpType</a></div><div class="ttdeci">pauliOpType</div><div class="ttdoc">Codes for specifying Pauli operators.</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__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#l00099">QuEST_common.c:99</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#l00177">QuEST.h:177</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#l00164">QuEST_cpu_distributed.c:164</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#l00644">QuEST_common.c:644</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ace1482ef82b83e7f926634a67b322fc4"><div class="ttname"><a href="QuEST__cpu_8c.html#ace1482ef82b83e7f926634a67b322fc4">statevec_controlledNotLocal</a></div><div class="ttdeci">void statevec_controlledNotLocal(Qureg qureg, int controlQubit, int targetQubit)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02679">QuEST_cpu.c:2679</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#l00272">QuEST_cpu_distributed.c:272</a></div></div>
<div class="ttc" id="agroup__type_html_gga1c703cf89629e4e9c7023cd402d67028a085c85cff6ba79c52d8b1e61c42ddddf"><div class="ttname"><a href="group__type.html#gga1c703cf89629e4e9c7023cd402d67028a085c85cff6ba79c52d8b1e61c42ddddf">PAULI_Z</a></div><div class="ttdeci">@ PAULI_Z</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_a45b0916c3e121837f214b64f7424e479"><div class="ttname"><a href="QuEST__cpu_8c.html#a45b0916c3e121837f214b64f7424e479">statevec_pauliYLocal</a></div><div class="ttdeci">void statevec_pauliYLocal(Qureg qureg, int targetQubit, int conjFac)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02887">QuEST_cpu.c:2887</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#l00934">QuEST_cpu.c:934</a></div></div>
<div class="ttc" id="agroup__type_html_ggaa7d869b117ba5024d6b84938e8cdfc65a2ad72f168181763513d7793c13bf2a91"><div class="ttname"><a href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a2ad72f168181763513d7793c13bf2a91">DISTANCE</a></div><div class="ttdeci">@ DISTANCE</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00234">QuEST.h:234</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#l00364">QuEST.h:364</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#l00611">QuEST_common.c:611</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#l00615">QuEST_common.c:615</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#l01369">QuEST.c:1369</a></div></div>
<div class="ttc" id="astructDiagonalOp_html_ada3bffa8e414f883e415dd74e46cd879"><div class="ttname"><a href="structDiagonalOp.html#ada3bffa8e414f883e415dd74e46cd879">DiagonalOp::numChunks</a></div><div class="ttdeci">int numChunks</div><div class="ttdoc">The number of nodes between which the elements of this operator are split.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00304">QuEST.h:304</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#l00509">QuEST_common.c:509</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a73a6c5647862b882f4ed7d83ec3c3e1f"><div class="ttname"><a href="QuEST__cpu_8c.html#a73a6c5647862b882f4ed7d83ec3c3e1f">densmatr_calcProbOfAllOutcomesLocal</a></div><div class="ttdeci">void densmatr_calcProbOfAllOutcomesLocal(qreal *outcomeProbs, Qureg qureg, int *qubits, int numQubits)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03616">QuEST_cpu.c:3616</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#l01303">QuEST_cpu_distributed.c:1303</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#l00343">QuEST.h:343</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#l03513">QuEST_cpu.c:3513</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">Allocate dynamic memory for a square complex matrix of any size, which can be passed to functions lik...</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8c_source.html#l01348">QuEST.c:1348</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a88670d0e7cebe33f61c1dd98daa338b3"><div class="ttname"><a href="QuEST__cpu_8c.html#a88670d0e7cebe33f61c1dd98daa338b3">densmatr_mixDepolarisingDistributed</a></div><div class="ttdeci">void densmatr_mixDepolarisingDistributed(Qureg qureg, int targetQubit, qreal depolLevel)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00230">QuEST_cpu.c:230</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_acabdfbd3184d3ab3bded61e24142b800"><div class="ttname"><a href="QuEST__cpu_8c.html#acabdfbd3184d3ab3bded61e24142b800">densmatr_mixTwoQubitDepolarisingQ1LocalQ2DistributedPart3</a></div><div class="ttdeci">void densmatr_mixTwoQubitDepolarisingQ1LocalQ2DistributedPart3(Qureg qureg, int targetQubit, int qubit2, qreal delta, qreal gamma)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00638">QuEST_cpu.c:638</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_a95abbe0cedf45b1ff2f070dba219fd7f"><div class="ttname"><a href="QuEST__common_8c.html#a95abbe0cedf45b1ff2f070dba219fd7f">statevec_twoQubitUnitary</a></div><div class="ttdeci">void statevec_twoQubitUnitary(Qureg qureg, int targetQubit1, int targetQubit2, ComplexMatrix4 u)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00561">QuEST_common.c:561</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#l00200">QuEST.h:200</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#l00338">QuEST.h:338</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#l03922">QuEST_cpu.c:3922</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#l00495">QuEST_common.c:495</a></div></div>
<div class="ttc" id="agroup__type_html_gga9c91c41aa42ae537995e89ffc616afe1a9aa2a35d92976c7de970506c4d19a96c"><div class="ttname"><a href="group__type.html#gga9c91c41aa42ae537995e89ffc616afe1a9aa2a35d92976c7de970506c4d19a96c">TWOS_COMPLEMENT</a></div><div class="ttdeci">@ TWOS_COMPLEMENT</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00269">QuEST.h:269</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#l03307">QuEST_cpu.c:3307</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ab58fe4be895283c2c4eb86ec9af5682e"><div class="ttname"><a href="QuEST__cpu_8c.html#ab58fe4be895283c2c4eb86ec9af5682e">statevec_multiControlledUnitaryDistributed</a></div><div class="ttdeci">void statevec_multiControlledUnitaryDistributed(Qureg qureg, 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#l02542">QuEST_cpu.c:2542</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a0acfe30083d0bc2a84da196378a36122"><div class="ttname"><a href="QuEST__internal_8h.html#a0acfe30083d0bc2a84da196378a36122">statevec_multiControlledMultiQubitUnitary</a></div><div class="ttdeci">void statevec_multiControlledMultiQubitUnitary(Qureg qureg, long long int ctrlMask, int *targs, 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#l01514">QuEST_cpu_distributed.c:1514</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#l03316">QuEST_cpu.c:3316</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ac7d30ce54573c75b35386cd0e284adc5"><div class="ttname"><a href="QuEST__cpu_8c.html#ac7d30ce54573c75b35386cd0e284adc5">statevec_multiControlledMultiQubitNotLocal</a></div><div class="ttdeci">void statevec_multiControlledMultiQubitNotLocal(Qureg qureg, int ctrlMask, int targMask)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02778">QuEST_cpu.c:2778</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a57368529b2a7e76fec423cbfe9980b22"><div class="ttname"><a href="QuEST__cpu_8c.html#a57368529b2a7e76fec423cbfe9980b22">statevec_controlledUnitaryDistributed</a></div><div class="ttdeci">void statevec_controlledUnitaryDistributed(Qureg qureg, 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#l02476">QuEST_cpu.c:2476</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a63cb88a5f4eb12fef087435b8db3f8eb"><div class="ttname"><a href="QuEST__internal_8h.html#a63cb88a5f4eb12fef087435b8db3f8eb">statevec_calcProbOfOutcome</a></div><div class="ttdeci">qreal statevec_calcProbOfOutcome(Qureg qureg, int measureQubit, int outcome)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l01312">QuEST_cpu_distributed.c:1312</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#l03767">QuEST_cpu.c:3767</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_a373394db1bf71b0be63585c0e9a52abb"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#a373394db1bf71b0be63585c0e9a52abb">compressPairVectorForTwoQubitDepolarise</a></div><div class="ttdeci">void compressPairVectorForTwoQubitDepolarise(Qureg qureg, int targetQubit, int qubit2)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00624">QuEST_cpu_distributed.c:624</a></div></div>
<div class="ttc" id="astructDiagonalOp_html_aa91713a22c95a383bba55e56c4a4e37a"><div class="ttname"><a href="structDiagonalOp.html#aa91713a22c95a383bba55e56c4a4e37a">DiagonalOp::chunkId</a></div><div class="ttdeci">int chunkId</div><div class="ttdoc">The position of the chunk of the operator held by this process in the full operator.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00306">QuEST.h:306</a></div></div>
<div class="ttc" id="agroup__type_html_ggaa7d869b117ba5024d6b84938e8cdfc65ae003ec1158e3a4e295616ced12af154e"><div class="ttname"><a href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ae003ec1158e3a4e295616ced12af154e">NORM</a></div><div class="ttdeci">@ NORM</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00232">QuEST.h:232</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a5ddfdb22e4704b680d67d08d9e80835b"><div class="ttname"><a href="QuEST__cpu_8c.html#a5ddfdb22e4704b680d67d08d9e80835b">statevec_compactUnitaryLocal</a></div><div class="ttdeci">void statevec_compactUnitaryLocal(Qureg qureg, int targetQubit, Complex alpha, Complex beta)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l01754">QuEST_cpu.c:1754</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#l00872">QuEST_cpu.c:872</a></div></div>
<div class="ttc" id="aQuEST__qasm_8h_html_a32bbd0276b80668812ac248cd81c725fa8417e56d80add49216437e0d451e8dd9"><div class="ttname"><a href="QuEST__qasm_8h.html#a32bbd0276b80668812ac248cd81c725fa8417e56d80add49216437e0d451e8dd9">GATE_HADAMARD</a></div><div class="ttdeci">@ GATE_HADAMARD</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__qasm_8h_source.html#l00026">QuEST_qasm.h:26</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a16ccb485bcffb328bbd5b2af6977cead"><div class="ttname"><a href="QuEST__cpu_8c.html#a16ccb485bcffb328bbd5b2af6977cead">statevec_calcExpecDiagonalOpLocal</a></div><div class="ttdeci">Complex statevec_calcExpecDiagonalOpLocal(Qureg qureg, DiagonalOp op)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l04124">QuEST_cpu.c:4124</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#l00084">QuEST_common.c:84</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#l00175">QuEST.h:175</a></div></div>
<div class="ttc" id="agroup__type_html_ggaa7d869b117ba5024d6b84938e8cdfc65ae5114537389194302c7a619e35e6e227"><div class="ttname"><a href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ae5114537389194302c7a619e35e6e227">SCALED_INVERSE_DISTANCE</a></div><div class="ttdeci">@ SCALED_INVERSE_DISTANCE</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00234">QuEST.h:234</a></div></div>
<div class="ttc" id="agroup__type_html_gga9c91c41aa42ae537995e89ffc616afe1a7165f9a47792f47c718ca128556fb3ae"><div class="ttname"><a href="group__type.html#gga9c91c41aa42ae537995e89ffc616afe1a7165f9a47792f47c718ca128556fb3ae">UNSIGNED</a></div><div class="ttdeci">@ UNSIGNED</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00269">QuEST.h:269</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a0aedcccfa50c7aaa8b7fc4c14d7cdfb8"><div class="ttname"><a href="QuEST__cpu_8c.html#a0aedcccfa50c7aaa8b7fc4c14d7cdfb8">statevec_multiControlledMultiQubitUnitaryLocal</a></div><div class="ttdeci">void statevec_multiControlledMultiQubitUnitaryLocal(Qureg qureg, long long int ctrlMask, int *targs, int numTargs, ComplexMatrixN u)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l01912">QuEST_cpu.c:1912</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#l01464">QuEST_cpu.c:1464</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#l00120">QuEST_common.c:120</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_af8236a00389137b5eff986a40577eaf3"><div class="ttname"><a href="QuEST__cpu_8c.html#af8236a00389137b5eff986a40577eaf3">statevec_multiControlledTwoQubitUnitaryLocal</a></div><div class="ttdeci">void statevec_multiControlledTwoQubitUnitaryLocal(Qureg qureg, long long int ctrlMask, int q1, int q2, ComplexMatrix4 u)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l01813">QuEST_cpu.c:1813</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#l00186">QuEST.h:186</a></div></div>
<div class="ttc" id="agroup__type_html_ggaa7d869b117ba5024d6b84938e8cdfc65a6313e6ff48163c11c47866c4fda4bfa0"><div class="ttname"><a href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a6313e6ff48163c11c47866c4fda4bfa0">INVERSE_DISTANCE</a></div><div class="ttdeci">@ INVERSE_DISTANCE</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00234">QuEST.h:234</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#l02651">QuEST_cpu.c:2651</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#l00328">QuEST_cpu_distributed.c:328</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#l00385">QuEST_cpu_distributed.c:385</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#l00675">QuEST_common.c:675</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_afb1e220c272754d0773aeccdb613b6b3"><div class="ttname"><a href="QuEST__cpu_8c.html#afb1e220c272754d0773aeccdb613b6b3">statevec_calcProbOfAllOutcomesLocal</a></div><div class="ttdeci">void statevec_calcProbOfAllOutcomesLocal(qreal *outcomeProbs, Qureg qureg, int *qubits, int numQubits)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03549">QuEST_cpu.c:3549</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#l00523">QuEST_cpu_distributed.c:523</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__gpu_8cu_html_ae1b7788cf504ec3d79de3855f97929c7"><div class="ttname"><a href="QuEST__gpu_8cu.html#ae1b7788cf504ec3d79de3855f97929c7">flipBit</a></div><div class="ttdeci">__forceinline__ __device__ long long int flipBit(const long long int number, const 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__internal_8h_html_ab7478fcaf6357ab202d72853b672e375"><div class="ttname"><a href="QuEST__internal_8h.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#l01431">QuEST_cpu_distributed.c:1431</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#l01431">QuEST_cpu_distributed.c:1431</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#l00329">QuEST.h:329</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#l00317">QuEST_cpu_distributed.c:317</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__internal_8h_html_a5658f2ecbbd4ea425db5f7dc7fc4ba92"><div class="ttname"><a href="QuEST__internal_8h.html#a5658f2ecbbd4ea425db5f7dc7fc4ba92">densmatr_collapseToKnownProbOutcome</a></div><div class="ttdeci">void densmatr_collapseToKnownProbOutcome(Qureg qureg, 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#l00791">QuEST_cpu.c:791</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="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03887">QuEST_cpu.c:3887</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#l00336">QuEST.h:336</a></div></div>
<div class="ttc" id="aQuEST__qasm_8c_html_aa4c380db9eda18892d5a86825fa4b165"><div class="ttname"><a href="QuEST__qasm_8c.html#aa4c380db9eda18892d5a86825fa4b165">qasm_recordControlledGate</a></div><div class="ttdeci">void qasm_recordControlledGate(Qureg qureg, TargetGate gate, int controlQubit, int targetQubit)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__qasm_8c_source.html#l00239">QuEST_qasm.c:239</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#l00200">QuEST.h:200</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#l00140">QuEST.h:140</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a7d8a817207847d2646a52044a63fd469"><div class="ttname"><a href="QuEST__internal_8h.html#a7d8a817207847d2646a52044a63fd469">statevec_applyParamNamedPhaseFuncOverrides</a></div><div class="ttdeci">void statevec_applyParamNamedPhaseFuncOverrides(Qureg qureg, int *qubits, int *numQubitsPerReg, int numRegs, enum bitEncoding encoding, enum phaseFunc functionNameCode, qreal *params, int numParams, long long int *overrideInds, qreal *overridePhases, int numOverrides, int conj)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l04446">QuEST_cpu.c:4446</a></div></div>
<div class="ttc" id="astructDiagonalOp_html_a85c3f52533efe831bbe40b9a48602388"><div class="ttname"><a href="structDiagonalOp.html#a85c3f52533efe831bbe40b9a48602388">DiagonalOp::imag</a></div><div class="ttdeci">qreal * imag</div><div class="ttdoc">The imaginary values of the 2^numQubits complex elements.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00310">QuEST.h:310</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a3ed30f823a59890be17441d97ce90c5c"><div class="ttname"><a href="QuEST__internal_8h.html#a3ed30f823a59890be17441d97ce90c5c">statevec_multiControlledMultiRotateZ</a></div><div class="ttdeci">void statevec_multiControlledMultiRotateZ(Qureg qureg, long long int ctrlMask, long long int targMask, qreal angle)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03358">QuEST_cpu.c:3358</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#l00200">QuEST.h:200</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#l00168">QuEST_common.c:168</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_a0eb14d48920ea469b0904ae63b47b589"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#a0eb14d48920ea469b0904ae63b47b589">compressPairVectorForSingleQubitDepolarise</a></div><div class="ttdeci">void compressPairVectorForSingleQubitDepolarise(Qureg qureg, int targetQubit)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00557">QuEST_cpu_distributed.c:557</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#l00332">QuEST.h:332</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#l00393">QuEST_cpu.c:393</a></div></div>
<div class="ttc" id="astructPauliHamil_html_ac1c6c9f6299cf83bbba88123216c3cac"><div class="ttname"><a href="structPauliHamil.html#ac1c6c9f6299cf83bbba88123216c3cac">PauliHamil::termCoeffs</a></div><div class="ttdeci">qreal * termCoeffs</div><div class="ttdoc">The real coefficient of each Pauli product. This is an array of length PauliHamil....</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00283">QuEST.h:283</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#l00297">QuEST_cpu_distributed.c:297</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a06fb16aa4af7c54d36052a14d3ad58a7"><div class="ttname"><a href="QuEST__cpu_8c.html#a06fb16aa4af7c54d36052a14d3ad58a7">statevec_controlledPauliYLocal</a></div><div class="ttdeci">void statevec_controlledPauliYLocal(Qureg qureg, int controlQubit, int targetQubit, int conjFac)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02982">QuEST_cpu.c:2982</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#l00620">QuEST_common.c:620</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a717a0448066831cb5b392bcf2e1d0529"><div class="ttname"><a href="QuEST__cpu_8c.html#a717a0448066831cb5b392bcf2e1d0529">densmatr_oneQubitDegradeOffDiagonal</a></div><div class="ttdeci">void densmatr_oneQubitDegradeOffDiagonal(Qureg qureg, int targetQubit, qreal retain)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00054">QuEST_cpu.c:54</a></div></div>
<div class="ttc" id="astructPauliHamil_html_a4b8d38c403553c07ceddcd40c46ce6c8"><div class="ttname"><a href="structPauliHamil.html#a4b8d38c403553c07ceddcd40c46ce6c8">PauliHamil::pauliCodes</a></div><div class="ttdeci">enum pauliOpType * pauliCodes</div><div class="ttdoc">The Pauli operators acting on each qubit, flattened over every operator.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00281">QuEST.h:281</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#l01464">QuEST_cpu.c:1464</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#l00607">QuEST_common.c:607</a></div></div>
<div class="ttc" id="agroup__type_html_ggaa7d869b117ba5024d6b84938e8cdfc65a31a29a30f92fe34c35098f941adbbc93"><div class="ttname"><a href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a31a29a30f92fe34c35098f941adbbc93">SCALED_PRODUCT</a></div><div class="ttdeci">@ SCALED_PRODUCT</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00233">QuEST.h:233</a></div></div>
<div class="ttc" id="aQuEST__precision_8h_html_a6698ce2a3971003a0a0289e5980d39c5"><div class="ttname"><a href="QuEST__precision_8h.html#a6698ce2a3971003a0a0289e5980d39c5">MAX_NUM_REGS_APPLY_ARBITRARY_PHASE</a></div><div class="ttdeci">#define MAX_NUM_REGS_APPLY_ARBITRARY_PHASE</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__precision_8h_source.html#l00072">QuEST_precision.h:72</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#l00760">QuEST_cpu.c:760</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#l01572">QuEST_cpu.c:1572</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_adf5fbea75826cde7d86fd7c31bcf3dec"><div class="ttname"><a href="QuEST__common_8c.html#adf5fbea75826cde7d86fd7c31bcf3dec">statevec_rotateAroundAxis</a></div><div class="ttdeci">void statevec_rotateAroundAxis(Qureg qureg, int rotQubit, qreal angle, Vector axis)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00314">QuEST_common.c:314</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#l00365">QuEST.h:365</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a623e577b7230f3c8dc202be6185b4289"><div class="ttname"><a href="QuEST__internal_8h.html#a623e577b7230f3c8dc202be6185b4289">densmatr_mixTwoQubitDephasing</a></div><div class="ttdeci">void densmatr_mixTwoQubitDephasing(Qureg qureg, int qubit1, int qubit2, qreal dephase)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00090">QuEST_cpu.c:90</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#l02095">QuEST_cpu.c:2095</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#l00178">QuEST.h:178</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a3eadcb581f2623e21e4967f791d0439c"><div class="ttname"><a href="QuEST__internal_8h.html#a3eadcb581f2623e21e4967f791d0439c">statevec_multiControlledTwoQubitUnitary</a></div><div class="ttdeci">void statevec_multiControlledTwoQubitUnitary(Qureg qureg, long long int ctrlMask, int targetQubit1, 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#l01458">QuEST_cpu_distributed.c:1458</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#l00493">QuEST_cpu_distributed.c:493</a></div></div>
<div class="ttc" id="astructDiagonalOp_html_a5131eeb67aafb4c19ac98270c3266742"><div class="ttname"><a href="structDiagonalOp.html#a5131eeb67aafb4c19ac98270c3266742">DiagonalOp::numQubits</a></div><div class="ttdeci">int numQubits</div><div class="ttdoc">The number of qubits this operator can act on (informing its size)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00300">QuEST.h:300</a></div></div>
<div class="ttc" id="astructPauliHamil_html_a737e46b40ef8990cf004d22eb9dbe2e4"><div class="ttname"><a href="structPauliHamil.html#a737e46b40ef8990cf004d22eb9dbe2e4">PauliHamil::numSumTerms</a></div><div class="ttdeci">int numSumTerms</div><div class="ttdoc">The number of terms in the weighted sum, or the number of Pauli products.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00285">QuEST.h:285</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ab19f28e68330da68ea3caa2bdef32da9"><div class="ttname"><a href="QuEST__cpu_8c.html#ab19f28e68330da68ea3caa2bdef32da9">statevec_multiControlledUnitaryLocal</a></div><div class="ttdeci">void statevec_multiControlledUnitaryLocal(Qureg qureg, 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#l02268">QuEST_cpu.c:2268</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_acc45bb8300922ea5933e294921e25ea2"><div class="ttname"><a href="QuEST__common_8c.html#acc45bb8300922ea5933e294921e25ea2">getQubitBitMask</a></div><div class="ttdeci">long long int getQubitBitMask(int *qubits, int numQubits)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00050">QuEST_common.c:50</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#l00750">QuEST_cpu.c:750</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_aec63559e8b9ab0e17efe18d64d2ceca6"><div class="ttname"><a href="QuEST__internal_8h.html#aec63559e8b9ab0e17efe18d64d2ceca6">statevec_compactUnitary</a></div><div class="ttdeci">void statevec_compactUnitary(Qureg qureg, int targetQubit, Complex alpha, Complex beta)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00858">QuEST_cpu_distributed.c:858</a></div></div>
<div class="ttc" id="astructDiagonalOp_html"><div class="ttname"><a href="structDiagonalOp.html">DiagonalOp</a></div><div class="ttdoc">Represents a diagonal complex operator on the full Hilbert state of a Qureg.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00297">QuEST.h:297</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__cpu_8c_html_a0f562af6cb665a8a7a3f80e9449734d5"><div class="ttname"><a href="QuEST__cpu_8c.html#a0f562af6cb665a8a7a3f80e9449734d5">statevec_pauliYDistributed</a></div><div class="ttdeci">void statevec_pauliYDistributed(Qureg qureg, ComplexArray stateVecIn, ComplexArray stateVecOut, int updateUpper, 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#l02945">QuEST_cpu.c:2945</a></div></div>
<div class="ttc" id="agroup__type_html_ggaa7d869b117ba5024d6b84938e8cdfc65aa318172feec5b530e9a7849f2f7b44e7"><div class="ttname"><a href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65aa318172feec5b530e9a7849f2f7b44e7">SCALED_INVERSE_SHIFTED_NORM</a></div><div class="ttdeci">@ SCALED_INVERSE_SHIFTED_NORM</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00232">QuEST.h:232</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a8d9c19a3424f0ad89bfbfd920d65301d"><div class="ttname"><a href="QuEST__cpu_8c.html#a8d9c19a3424f0ad89bfbfd920d65301d">densmatr_mixDampingDistributed</a></div><div class="ttdeci">void densmatr_mixDampingDistributed(Qureg qureg, int targetQubit, qreal damping)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00306">QuEST_cpu.c:306</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_aeb4453a2e609e5359d2995bccf6663ca"><div class="ttname"><a href="QuEST__cpu_8c.html#aeb4453a2e609e5359d2995bccf6663ca">densmatr_calcExpecDiagonalOpLocal</a></div><div class="ttdeci">Complex densmatr_calcExpecDiagonalOpLocal(Qureg qureg, DiagonalOp op)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l04167">QuEST_cpu.c:4167</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_aa987d1e0ba97da2ca540194356dd62de"><div class="ttname"><a href="QuEST__cpu_8c.html#aa987d1e0ba97da2ca540194356dd62de">statevec_pauliXLocal</a></div><div class="ttdeci">void statevec_pauliXLocal(Qureg qureg, int targetQubit)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02593">QuEST_cpu.c:2593</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_a336c3286d2434fc892ebe20e9fa22a24"><div class="ttname"><a href="QuEST__common_8c.html#a336c3286d2434fc892ebe20e9fa22a24">statevec_controlledRotateAroundAxis</a></div><div class="ttdeci">void statevec_controlledRotateAroundAxis(Qureg qureg, int controlQubit, int targetQubit, qreal angle, Vector axis)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00330">QuEST_common.c:330</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#l01195">QuEST_cpu.c:1195</a></div></div>
<div class="ttc" id="aQuEST__gpu_8cu_html_aec1852e1a8e70d3690919ce8ab551ba0"><div class="ttname"><a href="QuEST__gpu_8cu.html#aec1852e1a8e70d3690919ce8ab551ba0">extractBit</a></div><div class="ttdeci">__forceinline__ __device__ int extractBit(const int locationOfBitFromRight, const 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_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#l04005">QuEST_cpu.c:4005</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a008becc4a18f868340836e0ab9fd6df6"><div class="ttname"><a href="QuEST__internal_8h.html#a008becc4a18f868340836e0ab9fd6df6">statevec_collapseToKnownProbOutcome</a></div><div class="ttdeci">void statevec_collapseToKnownProbOutcome(Qureg qureg, int measureQubit, int outcome, qreal outcomeProb)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l01368">QuEST_cpu_distributed.c:1368</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ab124a3a9956046bf9c0e1e3ae9171f42"><div class="ttname"><a href="QuEST__cpu_8c.html#ab124a3a9956046bf9c0e1e3ae9171f42">densmatr_mixDampingLocal</a></div><div class="ttdeci">void densmatr_mixDampingLocal(Qureg qureg, int targetQubit, qreal damping)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00180">QuEST_cpu.c:180</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_aecc3c36b275c53b321de1611c2f06f78"><div class="ttname"><a href="QuEST__common_8c.html#aecc3c36b275c53b321de1611c2f06f78">shiftSubregIndices</a></div><div class="ttdeci">void shiftSubregIndices(int *allInds, int *numIndsPerReg, int numRegs, int shift)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00161">QuEST_common.c:161</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#l00222">QuEST_cpu_distributed.c:222</a></div></div>
<div class="ttc" id="agroup__type_html_ggaa7d869b117ba5024d6b84938e8cdfc65ad4c32e295c08ebe224e2c5ba6497f043"><div class="ttname"><a href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ad4c32e295c08ebe224e2c5ba6497f043">INVERSE_NORM</a></div><div class="ttdeci">@ INVERSE_NORM</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00232">QuEST.h:232</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#l00969">QuEST_cpu.c:969</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#l00208">QuEST_cpu_distributed.c:208</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ae6f0c9ed9261afbab4712e056a88763d"><div class="ttname"><a href="QuEST__cpu_8c.html#ae6f0c9ed9261afbab4712e056a88763d">statevec_multiControlledMultiQubitNotDistributed</a></div><div class="ttdeci">void statevec_multiControlledMultiQubitNotDistributed(Qureg qureg, int ctrlMask, int targMask, ComplexArray stateVecIn, ComplexArray stateVecOut)</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_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#l02151">QuEST_cpu.c:2151</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a071baf8b6951d2a7d6529394b6f39364"><div class="ttname"><a href="QuEST__cpu_8c.html#a071baf8b6951d2a7d6529394b6f39364">statevec_controlledCompactUnitaryDistributed</a></div><div class="ttdeci">void statevec_controlledCompactUnitaryDistributed(Qureg qureg, 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#l02414">QuEST_cpu.c:2414</a></div></div>
<div class="ttc" id="agroup__type_html_ggaa7d869b117ba5024d6b84938e8cdfc65acb6911398e0068f545a31b82bcdef3e4"><div class="ttname"><a href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65acb6911398e0068f545a31b82bcdef3e4">PRODUCT</a></div><div class="ttdeci">@ PRODUCT</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00233">QuEST.h:233</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#l00377">QuEST_cpu_distributed.c:377</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#l00341">QuEST.h:341</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#l00139">QuEST.h:139</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ab750fb47da2fca9849c678c869e40e69"><div class="ttname"><a href="QuEST__cpu_8c.html#ab750fb47da2fca9849c678c869e40e69">densmatr_mixDepolarisingLocal</a></div><div class="ttdeci">void densmatr_mixDepolarisingLocal(Qureg qureg, int targetQubit, qreal depolLevel)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00131">QuEST_cpu.c:131</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_ad09bb76ad67581b03ab176832cca37cf"><div class="ttname"><a href="QuEST__cpu_8c.html#ad09bb76ad67581b03ab176832cca37cf">statevec_collapseToKnownProbOutcomeDistributedRenorm</a></div><div class="ttdeci">void statevec_collapseToKnownProbOutcomeDistributedRenorm(Qureg qureg, int measureQubit, 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#l03849">QuEST_cpu.c:3849</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#l00370">QuEST_cpu_distributed.c:370</a></div></div>
<div class="ttc" id="astructDiagonalOp_html_a2c6eab631ef48b4978db026c98180eee"><div class="ttname"><a href="structDiagonalOp.html#a2c6eab631ef48b4978db026c98180eee">DiagonalOp::numElemsPerChunk</a></div><div class="ttdeci">long long int numElemsPerChunk</div><div class="ttdoc">The number of the 2^numQubits amplitudes stored on each distributed node.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00302">QuEST.h:302</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#l00325">QuEST.h:325</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_af3fc7bd149c70f083b149050242cd55e"><div class="ttname"><a href="QuEST__internal_8h.html#af3fc7bd149c70f083b149050242cd55e">statevec_hadamard</a></div><div class="ttdeci">void statevec_hadamard(Qureg qureg, int targetQubit)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l01258">QuEST_cpu_distributed.c:1258</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a86dbcc3db99294add9964741e19fbdab"><div class="ttname"><a href="QuEST__cpu_8c.html#a86dbcc3db99294add9964741e19fbdab">statevec_hadamardLocal</a></div><div class="ttdeci">void statevec_hadamardLocal(Qureg qureg, int targetQubit)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03078">QuEST_cpu.c:3078</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#l00188">QuEST.h:188</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_afa58cf7cb98a25ab33621120c5c330d0"><div class="ttname"><a href="QuEST__cpu_8c.html#afa58cf7cb98a25ab33621120c5c330d0">densmatr_applyDiagonalOpLocal</a></div><div class="ttdeci">void densmatr_applyDiagonalOpLocal(Qureg qureg, DiagonalOp op)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l04082">QuEST_cpu.c:4082</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a903beb4f5d8753a964ce2dc5f9096a24"><div class="ttname"><a href="QuEST__cpu_8c.html#a903beb4f5d8753a964ce2dc5f9096a24">statevec_controlledUnitaryLocal</a></div><div class="ttdeci">void statevec_controlledUnitaryLocal(Qureg qureg, int controlQubit, int targetQubit, ComplexMatrix2 u)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02336">QuEST_cpu.c:2336</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#l01412">QuEST_cpu_distributed.c:1412</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a600bda10463e2078ce746ec28f2d39c9"><div class="ttname"><a href="QuEST__internal_8h.html#a600bda10463e2078ce746ec28f2d39c9">statevec_multiControlledUnitary</a></div><div class="ttdeci">void statevec_multiControlledUnitary(Qureg qureg, long long int ctrlQubitsMask, long long int ctrlFlipMask, int targetQubit, ComplexMatrix2 u)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l01011">QuEST_cpu_distributed.c:1011</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#l00626">QuEST_common.c:626</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a535cc3c9962d511078691e4d64b4e272"><div class="ttname"><a href="QuEST__internal_8h.html#a535cc3c9962d511078691e4d64b4e272">statevec_phaseShiftByTerm</a></div><div class="ttdeci">void statevec_phaseShiftByTerm(Qureg qureg, int targetQubit, Complex term)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03185">QuEST_cpu.c:3185</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#l00494">QuEST_cpu.c:494</a></div></div>
<div class="ttc" id="aQuEST__cpu__distributed_8c_html_aefba328e047e6ef4fd1ae4b56901aaa7"><div class="ttname"><a href="QuEST__cpu__distributed_8c.html#aefba328e047e6ef4fd1ae4b56901aaa7">copyDiagOpIntoMatrixPairState</a></div><div class="ttdeci">void copyDiagOpIntoMatrixPairState(Qureg qureg, DiagonalOp op)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l01559">QuEST_cpu_distributed.c:1559</a></div></div>
<div class="ttc" id="astructPauliHamil_html_acb49fff0e3160ea1904c9ca34408b4e1"><div class="ttname"><a href="structPauliHamil.html#acb49fff0e3160ea1904c9ca34408b4e1">PauliHamil::numQubits</a></div><div class="ttdeci">int numQubits</div><div class="ttdoc">The number of qubits informing the Hilbert dimension of the Hamiltonian.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00287">QuEST.h:287</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a393da4c4bc582a757ca8406d8501aca0"><div class="ttname"><a href="QuEST__cpu_8c.html#a393da4c4bc582a757ca8406d8501aca0">statevec_controlledNotDistributed</a></div><div class="ttdeci">void statevec_controlledNotDistributed(Qureg qureg, 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#l02742">QuEST_cpu.c:2742</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#l00327">QuEST.h:327</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#l00334">QuEST.h:334</a></div></div>
<div class="ttc" id="agroup__type_html_ggaa7d869b117ba5024d6b84938e8cdfc65ace23d4b924240a245d83193f0ce398d4"><div class="ttname"><a href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ace23d4b924240a245d83193f0ce398d4">SCALED_DISTANCE</a></div><div class="ttdeci">@ SCALED_DISTANCE</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00234">QuEST.h:234</a></div></div>
<div class="ttc" id="aQuEST__qasm_8h_html_a32bbd0276b80668812ac248cd81c725fab12d052de2b7c59c6ab87710fd7d3c78"><div class="ttname"><a href="QuEST__qasm_8h.html#a32bbd0276b80668812ac248cd81c725fab12d052de2b7c59c6ab87710fd7d3c78">GATE_SWAP</a></div><div class="ttdeci">@ GATE_SWAP</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__qasm_8h_source.html#l00033">QuEST_qasm.h:33</a></div></div>
<div class="ttc" id="astructDiagonalOp_html_a1d66088bed235d524cd452b107694d5c"><div class="ttname"><a href="structDiagonalOp.html#a1d66088bed235d524cd452b107694d5c">DiagonalOp::real</a></div><div class="ttdeci">qreal * real</div><div class="ttdoc">The real values of the 2^numQubits complex elements.</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00308">QuEST.h:308</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#l03965">QuEST_cpu.c:3965</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#l00634">QuEST_common.c:634</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#l00339">QuEST_cpu_distributed.c:339</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a2f76ec8f08e19bb8e1254aafb10e160e"><div class="ttname"><a href="QuEST__cpu_8c.html#a2f76ec8f08e19bb8e1254aafb10e160e">densmatr_mixTwoQubitDepolarisingDistributed</a></div><div class="ttdeci">void densmatr_mixTwoQubitDepolarisingDistributed(Qureg qureg, int targetQubit, int qubit2, qreal delta, qreal gamma)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l00547">QuEST_cpu.c:547</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_aafc398f8f479fcc066a2dea700235635"><div class="ttname"><a href="QuEST__cpu_8c.html#aafc398f8f479fcc066a2dea700235635">statevec_unitaryLocal</a></div><div class="ttdeci">void statevec_unitaryLocal(Qureg qureg, int targetQubit, ComplexMatrix2 u)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02026">QuEST_cpu.c:2026</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a8bea931504c90d9bd97e74645667804e"><div class="ttname"><a href="QuEST__cpu_8c.html#a8bea931504c90d9bd97e74645667804e">densmatr_findProbabilityOfZeroLocal</a></div><div class="ttdeci">qreal densmatr_findProbabilityOfZeroLocal(Qureg qureg, int measureQubit)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03402">QuEST_cpu.c:3402</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#l00250">QuEST_cpu_distributed.c:250</a></div></div>
<div class="ttc" id="agroup__type_html_ggaa7d869b117ba5024d6b84938e8cdfc65a39111120b79016d6b3e773b711fa63f7"><div class="ttname"><a href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a39111120b79016d6b3e773b711fa63f7">SCALED_INVERSE_SHIFTED_DISTANCE</a></div><div class="ttdeci">@ SCALED_INVERSE_SHIFTED_DISTANCE</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00234">QuEST.h:234</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__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#l03139">QuEST_cpu.c:3139</a></div></div>
<div class="ttc" id="agroup__type_html_ggaa7d869b117ba5024d6b84938e8cdfc65a93c0c1e166dd43c6a57f61e5490808e1"><div class="ttname"><a href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a93c0c1e166dd43c6a57f61e5490808e1">SCALED_NORM</a></div><div class="ttdeci">@ SCALED_NORM</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00232">QuEST.h:232</a></div></div>
<div class="ttc" id="agroup__type_html_ggaa7d869b117ba5024d6b84938e8cdfc65a1a5168576607f460d3e60f184575cacb"><div class="ttname"><a href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65a1a5168576607f460d3e60f184575cacb">SCALED_INVERSE_PRODUCT</a></div><div class="ttdeci">@ SCALED_INVERSE_PRODUCT</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00233">QuEST.h:233</a></div></div>
<div class="ttc" id="aQuEST__cpu__internal_8h_html_ae94d012c3da6c84599e99f6afea81f5f"><div class="ttname"><a href="QuEST__cpu__internal_8h.html#ae94d012c3da6c84599e99f6afea81f5f">maskContainsBit</a></div><div class="ttdeci">static int maskContainsBit(const long long int mask, const 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="aQuEST__qasm_8c_html_a81749d23b8c3c1acf87c9db675872c24"><div class="ttname"><a href="QuEST__qasm_8c.html#a81749d23b8c3c1acf87c9db675872c24">qasm_recordGate</a></div><div class="ttdeci">void qasm_recordGate(Qureg qureg, TargetGate gate, int targetQubit)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__qasm_8c_source.html#l00179">QuEST_qasm.c:179</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_ae37b3eff5d3affbc1edfe216cabc1c53"><div class="ttname"><a href="QuEST__internal_8h.html#ae37b3eff5d3affbc1edfe216cabc1c53">densmatr_calcProbOfOutcome</a></div><div class="ttdeci">qreal densmatr_calcProbOfOutcome(Qureg qureg, int measureQubit, int outcome)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l01328">QuEST_cpu_distributed.c:1328</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_ae71449b1cc6e6250b91f539153a7a0d3"><div class="ttname"><a href="QuEST__common_8c.html#ae71449b1cc6e6250b91f539153a7a0d3">M_PI</a></div><div class="ttdeci">#define M_PI</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00041">QuEST_common.c:41</a></div></div>
<div class="ttc" id="aQuEST__common_8c_html_a4f419c557e4505da481879407a920541"><div class="ttname"><a href="QuEST__common_8c.html#a4f419c557e4505da481879407a920541">applySymmetrizedTrotterCircuit</a></div><div class="ttdeci">void applySymmetrizedTrotterCircuit(Qureg qureg, PauliHamil hamil, qreal time, int order)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__common_8c_source.html#l00820">QuEST_common.c:820</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a790add229738945812ae2048c03d58ec"><div class="ttname"><a href="QuEST__cpu_8c.html#a790add229738945812ae2048c03d58ec">statevec_controlledPauliYDistributed</a></div><div class="ttdeci">void statevec_controlledPauliYDistributed(Qureg qureg, int controlQubit, ComplexArray stateVecIn, ComplexArray stateVecOut, int conjFac)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l03036">QuEST_cpu.c:3036</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a215e2d6f88dbecc0b408b3573b5e144f"><div class="ttname"><a href="QuEST__cpu_8c.html#a215e2d6f88dbecc0b408b3573b5e144f">statevec_controlledCompactUnitaryLocal</a></div><div class="ttdeci">void statevec_controlledCompactUnitaryLocal(Qureg qureg, int controlQubit, int targetQubit, Complex alpha, Complex beta)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu_8c_source.html#l02196">QuEST_cpu.c:2196</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#l00241">QuEST_cpu_distributed.c:241</a></div></div>
<div class="ttc" id="aQuEST__qasm_8c_html_ab60a4a8af0530cbfa8cba1b02692d448"><div class="ttname"><a href="QuEST__qasm_8c.html#ab60a4a8af0530cbfa8cba1b02692d448">qasm_recordNamedPhaseFunc</a></div><div class="ttdeci">void qasm_recordNamedPhaseFunc(Qureg qureg, int *qubits, int *numQubitsPerReg, int numRegs, enum bitEncoding encoding, enum phaseFunc funcName, qreal *params, int numParams, long long int *overrideInds, qreal *overridePhases, int numOverrides)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__qasm_8c_source.html#l00726">QuEST_qasm.c:726</a></div></div>
<div class="ttc" id="aQuEST__internal_8h_html_a1275d604674224d87a173fb5bac78835"><div class="ttname"><a href="QuEST__internal_8h.html#a1275d604674224d87a173fb5bac78835">statevec_controlledCompactUnitary</a></div><div class="ttdeci">void statevec_controlledCompactUnitary(Qureg qureg, int controlQubit, int targetQubit, Complex alpha, Complex beta)</div><div class="ttdef"><b>Definition:</b> <a href="QuEST__cpu__distributed_8c_source.html#l00934">QuEST_cpu_distributed.c:934</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#l00212">QuEST_cpu_distributed.c:212</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#l01082">QuEST_cpu.c:1082</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#l00137">QuEST.h:137</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#l00740">QuEST_cpu.c:740</a></div></div>
<div class="ttc" id="agroup__type_html_ggaa7d869b117ba5024d6b84938e8cdfc65ae8c96906c1ec109d295c491e572d01e2"><div class="ttname"><a href="group__type.html#ggaa7d869b117ba5024d6b84938e8cdfc65ae8c96906c1ec109d295c491e572d01e2">SCALED_INVERSE_NORM</a></div><div class="ttdeci">@ SCALED_INVERSE_NORM</div><div class="ttdef"><b>Definition:</b> <a href="QuEST_8h_source.html#l00232">QuEST.h:232</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#l01001">QuEST_cpu.c:1001</a></div></div>
<div class="ttc" id="aQuEST__cpu_8c_html_a8535bc15c2ff249ddddb3fde6eff1490"><div class="ttname"><a href="QuEST__cpu_8c.html#a8535bc15c2ff249ddddb3fde6eff1490">statevec_findProbabilityOfZeroLocal</a></div><div class="ttdeci">qreal statevec_findProbabilityOfZeroLocal(Qureg qureg, 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#l03457">QuEST_cpu.c:3457</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>