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:
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 4.1 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.
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-fpyCart.json as well.
Now let’s set up and run the first case using the command pycart-n1.
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.
$ pycart-n1Case 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 3Using 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 0Submitted 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.
Read project settings from pyCart.json and conditions from
matrix.csv
Create the mesh
Create the poweroff folder
Read the bullet.tri file and write it to the poweroff folder
Run autoInputs to create input.c3d and preSpec.c3d.cntl
Run cubes to create volume mesh Mesh.c3d
Run mgPrep to prepare the grid for multigrid
Prepare the case
Create the m1.50a0.0b0.0 folder
Link the mesh files created in the previous step
Copy the template input.cntl and set Mach, alpha, and beta
Create a PBS script run_cart3d.pbs
Run the case by calling bashrun_cart3d.pbs
Let’s run another case.
$ pycart-n1Case Config/Run Directory Status Iterations Que CPU Time---- --------------------- ------- ----------- --- --------0 poweroff/m1.5a0.0b0.0 DONE 200/200 . 0.01 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 0Submitted 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.
$ pycart-c
Case Config/Run Directory Status Iterations Que CPU Time---- --------------------- ------- ----------- --- --------0 poweroff/m1.5a0.0b0.0 DONE 200/200 . 0.01 poweroff/m2.0a0.0b0.0 DONE 200/200 . 0.02 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-fpyCart.json-n10. Running this case in the current folder gives
the following results.
$ pycart
Case Config/Run Directory Status Iterations Que CPU Time---- --------------------- ------- ----------- --- --------0 poweroff/m1.5a0.0b0.0 DONE 200/200 . 0.01 poweroff/m2.0a0.0b0.0 DONE 200/200 . 0.02 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 03 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 0Submitted 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.