.. _pycart-ex-bullet: Demo 1: Basic Usage on a Bullet Shape ===================================== The first example demonstrates how pyCart and other CAPE interfaces generate parametrically named files, interact with the master JSON file, and set up Cart3D input files. To get started, clone this repo and run the following commands: .. code-block:: console $ git clone https://github.com/nasa-ddalle/pycart01-bullet.git $ cd pycart01-bullet $ ./copy-files.py $ cd work/ This will copy all of the files into a newly created ``work/`` folder. Follow the instructions below by entering that ``work/`` folder; the purpose is that you can easily delete the ``work/`` folder and restart the tutorial at any time. The geometry used for this shape is a simple capped cylinder with 4890 faces and three components. The surface triangulation, ``bullet.tri``, is shown below. .. figure:: bullet01.png :width: 4in Simple bullet shape triangulation with three components The files in the folder before starting the demo are shown below. The required Cart3D input file ``input.cntl`` is not present. In this case, pyCart will use a template file without any problems. * ``pyCart.json``: Master input file for pyCart * ``matrix.csv``: List of run conditions for each variable * ``bullet.tri``: Surface triangulation * ``Config.xml``: Names for surface components A good first test command is the following, which checks the status of each case in the matrix. .. code-block:: bash $ pycart -c Case Config/Run Directory Status Iterations Que CPU Time ---- --------------------- ------- ----------- --- -------- 0 poweroff/m1.5a0.0b0.0 --- / . 1 poweroff/m2.0a0.0b0.0 --- / . 2 poweroff/m2.0a2.0b0.0 --- / . 3 poweroff/m2.0a2.0b2.0 --- / . ---=4, Somehow pyCart has determined that there are four configurations to run at a variety of Mach numbers, angles of attack, and sideslip angles. Since the master input file ``pyCart.json`` has the default name, the script finds it automatically. We could have used ``pycart -c -f pyCart.json`` as well. Now let's set up and run the first case using the command ``pycart -n 1``. This will create the results folder ``poweroff/``, create a volume mesh in that folder, create a case folder for the first set of conditions to run, and call ``flowCart`` to analyze the first case. The output is shown below. .. code-block:: console $ pycart -n 1 Case Config/Run Directory Status Iterations Que CPU Time ---- --------------------- ------- ----------- --- -------- 0 poweroff/m1.5a0.0b0.0 --- / . Group name: 'poweroff' (index 0) Preparing surface triangulation... Reading tri file(s) from root directory. Writing triangulation: 'Components.i.tri' > autoInputs -r 8 -t Components.i.tri -maxR 10 > cubes -pre preSpec.c3d.cntl -maxR 10 -reorder -a 10 -b 2 > mgPrep -n 3 Using template for 'input.cntl' file Starting case 'poweroff/m1.5a0.0b0.0'. > flowCart -his -clic -N 200 -y_is_spanwise -limiter 2 -T -cfl 1.1 -mg 3 -binaryIO -tm 0 Submitted or ran 1 job(s). ---=1, Obviously in these examples the value of ``PWD`` will differ from what is shown in these examples. This command tells pyCart to loop through the cases until if finds the first case to run. Because no cases had been run prior to executing this command, the following steps are taken as a result of this command. 1. Read project settings from ``pyCart.json`` and conditions from ``matrix.csv`` 2. Create the mesh A. Create the ``poweroff`` folder B. Read the ``bullet.tri`` file and write it to the ``poweroff`` folder C. Run ``autoInputs`` to create ``input.c3d`` and ``preSpec.c3d.cntl`` D. Run ``cubes`` to create volume mesh ``Mesh.c3d`` E. Run ``mgPrep`` to prepare the grid for multigrid 3. Prepare the case A. Create the ``m1.50a0.0b0.0`` folder B. Link the mesh files created in the previous step C. Copy the template ``input.cntl`` and set Mach, alpha, and beta D. Create a PBS script ``run_cart3d.pbs`` 4. Run the case by calling ``bash run_cart3d.pbs`` Let's run another case. .. code-block:: console $ pycart -n 1 Case Config/Run Directory Status Iterations Que CPU Time ---- --------------------- ------- ----------- --- -------- 0 poweroff/m1.5a0.0b0.0 DONE 200/200 . 0.0 1 poweroff/m2.0a0.0b0.0 --- / . Using template for 'input.cntl' file Starting case 'poweroff/m2.0a0.0b0.0'. > flowCart -his -clic -N 200 -y_is_spanwise -limiter 2 -T -cfl 1.1 -mg 3 -binaryIO -tm 0 Submitted or ran 1 job(s). ---=1, DONE=1, This time, there is a lot less output because the different cases can use the same mesh. In the description of the tasks performed for the first case, step 2 can be skipped for subsequent runs. Now let's check the status again using ``pycart -c``. The CPU time is listed as 0.0 for both cases because this simple case takes about 0.02 total hours, and the display is rounded down to the nearest tenth of an hour. .. code-block:: console $ pycart -c Case Config/Run Directory Status Iterations Que CPU Time ---- --------------------- ------- ----------- --- -------- 0 poweroff/m1.5a0.0b0.0 DONE 200/200 . 0.0 1 poweroff/m2.0a0.0b0.0 DONE 200/200 . 0.0 2 poweroff/m2.0a2.0b0.0 --- / . 3 poweroff/m2.0a2.0b2.0 --- / . ---=2, DONE=2, That's it. Now we have two cases run in separate folders, and each looks like a standard Cart3D run. Finally, the default call to ``pycart`` is equivalent to ``pycart -f pyCart.json -n 10``. Running this case in the current folder gives the following results. .. code-block:: console $ pycart Case Config/Run Directory Status Iterations Que CPU Time ---- --------------------- ------- ----------- --- -------- 0 poweroff/m1.5a0.0b0.0 DONE 200/200 . 0.0 1 poweroff/m2.0a0.0b0.0 DONE 200/200 . 0.0 2 poweroff/m2.0a2.0b0.0 --- / . Using template for 'input.cntl' file Starting case 'poweroff/m2.0a2.0b0.0'. > flowCart -his -clic -N 200 -y_is_spanwise -limiter 2 -T -cfl 1.1 -mg 3 -binaryIO -tm 0 3 poweroff/m2.0a2.0b2.0 --- / . Using template for 'input.cntl' file Starting case 'poweroff/m2.0a2.0b2.0'. > flowCart -his -clic -N 200 -y_is_spanwise -limiter 2 -T -cfl 1.1 -mg 3 -binaryIO -tm 0 Submitted or ran 2 job(s). ---=2, DONE=2, This attempts to run 10 cases, but the first two cases are already completed. Since there are only two cases remaining, the job quits before it can get to 10 cases.