{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"\n",
"# The NRPy+ code required to generate the needed C code for the lowering operator: $g_{ij} \\beta^i$, with the result set to C variables \"`betaD0out`\", \"`betaD1out`\", and \"`betaD2out`\" \n",
"\n",
"## *Courtesy Zach Etienne*"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"execution": {
"iopub.execute_input": "2021-03-07T17:12:01.961884Z",
"iopub.status.busy": "2021-03-07T17:12:01.960660Z",
"iopub.status.idle": "2021-03-07T17:12:02.366355Z",
"shell.execute_reply": "2021-03-07T17:12:02.365760Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/*\n",
" * Original SymPy expressions:\n",
" * \"[betaD0out = betaU0*hDD00 + betaU1*hDD01 + betaU2*hDD02,\n",
" * betaD1out = betaU0*hDD01 + betaU1*hDD11 + betaU2*hDD12,\n",
" * betaD2out = betaU0*hDD02 + betaU1*hDD12 + betaU2*hDD22]\"\n",
" */\n",
"{\n",
" betaD0out = betaU0*hDD00 + betaU1*hDD01 + betaU2*hDD02;\n",
" betaD1out = betaU0*hDD01 + betaU1*hDD11 + betaU2*hDD12;\n",
" betaD2out = betaU0*hDD02 + betaU1*hDD12 + betaU2*hDD22;\n",
"}\n",
"\n"
]
}
],
"source": [
"# The NRPy_param_funcs module sets up global structures that manage free parameters within NRPy+\n",
"import NRPy_param_funcs as par # NRPy+: Parameter interface\n",
"# The indexedexp module defines various functions for defining and managing indexed quantities like tensors and pseudotensors\n",
"import indexedexp as ixp # NRPy+: Symbolic indexed expression (e.g., tensors, vectors, etc.) support\n",
"# The grid module defines various parameters related to a numerical grid or the dimensionality of indexed expressions\n",
"# For example, it declares the parameter DIM, which specifies the dimensionality of the indexed expression\n",
"import grid as gri # NRPy+: Functions having to do with numerical grids\n",
"from outputC import outputC # NRPy+: Basic C code output functionality\n",
"\n",
"# Set the dimension to 3\n",
"par.set_parval_from_str(\"DIM\",3)\n",
"\n",
"# Declare rank-1 contravariant (\"U\" and \"D\") vectors\n",
"betaU = ixp.declarerank1(\"betaU\")\n",
"betaD = ixp.zerorank1()\n",
"\n",
"# Declare h_{ij}=hDD[i][j] and h^{ij}=hUU[i][j]\n",
"hDD = ixp.declarerank2(\"hDD\",\"sym01\")\n",
"\n",
"# Get the dimension we just set (should be set to 3).\n",
"DIM = par.parval_from_str(\"DIM\")\n",
"\n",
"for i in range(DIM):\n",
" for j in range(DIM):\n",
" betaD[j] += betaU[i]*hDD[i][j]\n",
"\n",
"outputC(betaD,[\"betaD0out\",\"betaD1out\",\"betaD2out\"])"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}