Skip to content
Started 7 mo 20 days ago
Took 4 hr 15 min on reynolds
Failed

#32 (Sep 10, 2023, 2:11:44 PM)

EGADS 1942 OpenCSM 2394
CAPS/unit
Revisions
  • svn+ssh://acdl.mit.edu/home/svnroot/EGADS : 1942
  • svn+ssh://acdl.mit.edu/home/svnroot/JenkinsESP : 834
  • svn+ssh://acdl.mit.edu/home/svnroot/OpenCSM/trunk/data : 2392
  • svn+ssh://acdl.mit.edu/home/svnroot/OpenCSM/trunk/pyOCSM : 2297
  • svn+ssh://acdl.mit.edu/home/svnroot/OpenCSM/trunk/src : 2394
  • svn+ssh://acdl.mit.edu/home/svnroot/OpenCSM/trunk/udc : 2315
  • svn+ssh://acdl.mit.edu/home/svnroot/CAPS : 3937
  • svn+ssh://acdl.mit.edu/home/svnroot/OpenCSM/trunk/Jenkins : 2308
Changes
  1. Fixes for refine and add Mesh_Morph for structures (detail)
    by galbramc
  2. Lint fixes (detail)
    by galbramc
  3. Fix ThermalExternal. Add Mesh_Morph and Temperaure field to SU2 (detail)
    by galbramc
  4. Another try at scan-build suppression (detail)
    by galbramc
  5. Dox and scan-build fixes (detail)
    by galbramc
  6. lint fixes (detail)
    by galbramc
  7. Fixes for Fun3D data transfer (detail)
    by galbramc
  8. Fix last commit (detail)
    by galbramc
  9. Refactor all mesh transfer to PointerMesh. Add thermal transfor for Fun3D and structures. (detail)
    by galbramc
  10. Update testing geometries (detail)
    by galbramc
  11. Fix warning (detail)
    by galbramc
  12. Fix refine AIM compile error (detail)
    by galbramc
  13. Add refine AIM (detail)
    by galbramc
  14. Dox and other small fixes (detail)
    by galbramc
  15. Update BuildFromRepo.txt (detail)
    by galbramc
  16. Fix Cart3D example (detail)
    by galbramc
  17. Update plato example csm file name (detail)
    by galbramc
  18. Fixes for aflr3 MultiDomain (detail)
    by galbramc
  19. Lint fixes (detail)
    by galbramc
  20. Add Motion_Driver and Mesh_Movement to fun3D AIM to wtite moving body input file. Generate fun3dNamelist with latest cython. (detail)
    by galbramc
  21. Fix bug in FEA connections (detail)
    by galbramc
  22. xfoil fixes to normalize properly (detail)
    by galbramc
  23. Do not normalize mses airfoils (detail)
    by galbramc
  24. Upgrade to AFLR 11.5.9. Fix bug where aflr3 BL_Thickness and BL_Initial_Spacing were not scaled by capsMeshLength (detail)
    by galbramc
  25. Suppress lint (detail)
    by galbramc
  26. More cleanup for AFLR (detail)
    by galbramc
  27. Lint fix (detail)
    by galbramc
  28. Cleanup aflr3_Interface (detail)
    by galbramc
  29. Fix AFLR link error (detail)
    by galbramc
  30. Upgrade to AFLR 11.5.8 (detail)
    by galbramc
  31. Fix stanalizer warning (detail)
    by galbramc
  32. Update surface to volume mapping for mesh morphing (detail)
    by galbramc
  33. Use EG_mapBody maps for more robust morphing (detail)
    by galbramc
  34. Fix plato AIM Mesh_Morph symbolic link (detail)
    by galbramc
  35. Uprev to ESP 1.24 (detail)
    by galbramc
  36. Full double precision for point tecplot files (detail)
    by galbramc
  37. Example to demo AFLR4 quad mesh generation (detail)
    by nitin
  38. Appended AFLR4 related attributes (detail)
    by nitin
  39. Fix for cart3d makefile (detail)
    by galbramc
  40. Minor correction to friction static libgfortran check (detail)
    by galbramc
  41. Check for static libgfortran (detail)
    by galbramc
  42. Always build friction with static libgfortran (detail)
    by galbramc
  43. Fix VLM memory leak (detail)
    by galbramc
  44. Fix avl bug where controls are not updated when the surface is unchanged. (detail)
    by galbramc
  45. Fix designVariableID for Structural design (detail)
    by galbramc
  46. Fix last commit (detail)
    by galbramc
  47. Install aim/utils header files on Windoze (detail)
    by galbramc
  48. Add include guards to all aim/util header files. Install aim/util header files in ESP_ROOT/include/aim/util on unix. (detail)
    by galbramc
  49. Lint fix (detail)
    by galbramc
  50. Stanalizer fix (detail)
    by galbramc
  51. Fix array bounds error and update another test with AFLR (detail)
    by galbramc
  52. Stanalizer fixes (detail)
    by galbramc
  53. Add aflr4 skin input (detail)
    by galbramc
  54. Upgrade to AFLR 11.4.5 (detail)
    by galbramc
  55. AFLR2 quad sometimes generates invalid elements (detail)
    by galbramc
  56. Update two more aeroelastic examples to use AFLR (detail)
    by galbramc
  57. Another try at more robust areolastic example (detail)
    by galbramc
  58. Adjust tessellaton to hopefully help tetgen (detail)
    by galbramc
  59. Add capsMeshLength to legacy csm file (detail)
    by galbramc
  60. fix corsairlite atmosphere model (detail)
    by dongjoon
  61. Fixes for AFLR2 (detail)
    by galbramc
  62. Updated config file for the latest version of SU2 (7.5.1) (detail)
    by nitin
  63. One more try at fixing valueString (detail)
    by galbramc
  64. Accurate memory allocation in valueString (detail)
    by galbramc
  65. remove clang warnings (detail)
    by jfdannen
  66. Fix clang 14.0.3 warnings (detail)
    by galbramc
  67. Lint suppression (detail)
    by galbramc
  68. Update aflr2 to use capsMeshLength (detail)
    by galbramc
  69. Fix aflr2 for Phasing (detail)
    by galbramc
  70. Fix compile warning (detail)
    by galbramc
  71. Fix for AFLR2 (detail)
    by galbramc
  72. Comment out debug code (detail)
    by galbramc
  73. Allow AFLR2 to work with multiple faces (detail)
    by galbramc
  74. Only build Writer directories on Windoze (detail)
    by galbramc
  75. Add meshWriter NMakefile verbosity (detail)
    by galbramc
  76. Suppress lint warning (detail)
    by galbramc
  77. NMakefile fix (detail)
    by galbramc
  78. Fix NMakefiles for meshWriter (detail)
    by galbramc
  79. Documentation updates (detail)
    by galbramc
  80. Upgrade fun3d cython files (detail)
    by galbramc
  81. One more try at AIM_NOTFOUND (detail)
    by galbramc
  82. Add AIM_NOTFOUND macro (detail)
    by galbramc
  83. Add aimInfo to fea_getDesignResponse (detail)
    by galbramc
  84. Test cart3d on commit again (detail)
    by galbramc
  85. Remove Cart3D from commit testing for now (detail)
    by galbramc
  86. Dissable tecplot debug dump for aflr4 (detail)
    by galbramc
  87. Fix compiler warning (detail)
    by galbramc
  88. Upgrade to AFLR 11.3.17 (detail)
    by galbramc
  89. Updated makefiles for AFLR 11.3.17. Add doc about capsFile. (detail)
    by galbramc
  90. Fix typo (detail)
    by galbramc
  91. Allow aflr4 to mesh abutting bodies with matching faces. (detail)
    by galbramc
  92. fix memory leak in Slugs; update Makefile.DARWIN64 in Slugs to have sanitize targets (detail)
    by jfdannen
  93. Fix block name for exodusWriter. Add symbolic link to mesh for plato AIM. (detail)
    by galbramc
  94. Try that one more time (detail)
    by galbramc
  95. Use and empty mesh instead of edge only for aflr2 tessellation (detail)
    by galbramc
  96. Fix warning (detail)
    by galbramc
  97. Fix uninitialized data in AFLR3 (detail)
    by galbramc
  98. Add meshRef mapping for aflr2 (detail)
    by galbramc
  99. Updated AFLR4 files for new Quading (detail)
    by galbramc
  100. Upgrade to AFLR 11.3.15 (detail)
    by galbramc
  101. Fix for 2D meshing (detail)
    by galbramc
  102. Forgot a file (detail)
    by galbramc
  103. Another try at the stanalizer (detail)
    by galbramc
  104. Fix stanalizer warning (detail)
    by galbramc
  105. Restore CAPS training files (detail)
    by galbramc
  106. Add support for exodux Nodeset. Add surface morphing for plato aim (no volume morphing). (detail)
    by galbramc
  107. another attempt to eliminate spurious compiler warnings (detail)
    by jfdannen
  108. another attempt to fix spurious warning messages (detail)
    by jfdannen
  109. fix to avoid compiler warnings (detail)
    by jfdannen
  110. numerous updates to Slugs (detail)
    by jfdannen
  111. Fix uninitialized data (detail)
    by galbramc
  112. Fix last commit (detail)
    by galbramc
  113. Fix surface to volume map for aflr3 MultiDomain (detail)
    by galbramc
  114. Plug two aflr3 leaks (detail)
    by galbramc
  115. Fix bug introduced in AFLR4 (detail)
    by galbramc
  116. Fix MultiDomain mapvol for aflr3 (detail)
    by galbramc
  117. Warning and lint fixes (detail)
    by galbramc
  118. Update AFLR3 to work for MultiDomain. Add eto dump for plato AIM. Update TACS dox. Add more plato examples. (detail)
    by galbramc
  119. small fix to morph test (detail)
    by ryan
  120. small fix to morph test (detail)
    by ryan
  121. Tex fix for training (detail)
    by galbramc
  122. Training updates (detail)
    by galbramc
  123. Training fixes and updates (detail)
    by galbramc
  124. Lint fix (detail)
    by galbramc
  125. Fix last commit (detail)
    by galbramc
  126. Fully support 2D meshes for plato and exodus mesher writer (detail)
    by galbramc
  127. Add missing avl derivatives (detail)
    by galbramc
  128. Another round of training updates (detail)
    by galbramc
  129. lint fix (detail)
    by galbramc
  130. Comment on F_UFMTENDIAN environment variable if msesAIM fails to read mses sensx file. (detail)
    by galbramc
  131. Add support for 2D meshes with exodusWriter (detail)
    by galbramc
  132. One more training update (detail)
    by galbramc
  133. Training tex updates (detail)
    by galbramc
  134. Minor training fixes and updates (detail)
    by galbramc
  135. Remove old training files. Some training tex fixes. (detail)
    by galbramc
  136. Update date on training slides (detail)
    by galbramc
  137. Add training tar script (detail)
    by galbramc
  138. Corrections to CAPS session01 (detail)
    by galbramc
  139. Missed a file (detail)
    by galbramc
  140. Updated CAPS training for Jan 2023 (detail)
    by galbramc
  141. update copyright notices (detail)
    by jfdannen
  142. add transform option to Slugs; in Slugs, the KutTriangles option automatically creates a link; add optional GRAFIC to cutTriangles in Slugs; lots of improvements to Slugs, especially for cases with very noisy .stl file (detail)
    by jfdannen
  143. Update Copyright date (detail)
    by galbramc
  144. fix bug that did not allow interactive use of Slugs; add Kut triangles option in Slugs; update testScript.txt to include interactive Slugs testing (detail)
    by jfdannen
  145. Fix surface to volume map for MultiDomain tetgen meshes (detail)
    by galbramc
  146. Uprev to 1.23 (detail)
    by galbramc
  147. dox fix (detail)
    by ryan
  148. Add TACS and MSES to AIM documentation (detail)
    by galbramc
  149. Check for nPoints==0 when filling bounds (detail)
    by galbramc
  150. Check if no bodies have capsDiscipline Structure (detail)
    by galbramc
  151. Rev update and other dox fixes (detail)
    by galbramc
  152. More VLM error handling updates (detail)
    by galbramc
  153. Update documentation for masstran. Update VLM input error messages. (detail)
    by galbramc
  154. Use the body _name if there is only one body in exodus writer (detail)
    by galbramc
  155. Initial commit of 2023 training (detail)
    by galbramc
  156. add comments to cyli_box.csm (detail)
    by jfdannen
  157. unset LD_PRELOAD when checking NETCDFINC (detail)
    by galbramc
  158. Another debug attempt (detail)
    by galbramc
  159. Debugging exodus makefile (detail)
    by galbramc
  160. change sprintf to snprintf in Slugs (detail)
    by jfdannen
  161. Missed one (detail)
    by galbramc
  162. More example updates (detail)
    by galbramc
  163. Replace last sprintf with snprintf (detail)
    by galbramc
  164. fix examples (detail)
    by ryan
  165. fix examples (detail)
    by ryan
  166. Fix double free in astrosAIM (detail)
    by galbramc
  167. Updated config file generator for SU2-7.4.0 (detail)
    by nitin
  168. Warning fix. Double memory free fix. More sprintf replacements. (detail)
    by galbramc
  169. Replace aim sprintf with snprintf (detail)
    by galbramc
  170. scan-build fix (detail)
    by galbramc
  171. Windoze fix (detail)
    by galbramc
  172. masstran now supports analysis sensitvities (detail)
    by galbramc
  173. More example updates for new structures design variable relations (detail)
    by galbramc
  174. Fix for old training (detail)
    by galbramc
  175. Lots of lint fixes (detail)
    by galbramc
  176. Fix array bounds erros and update tests for new structures design variables (detail)
    by galbramc
  177. scan-build fixes (detail)
    by galbramc
  178. Fix legacy example (detail)
    by galbramc
  179. Warning fix (detail)
    by galbramc
  180. Fix previous commits. Add more info in caps_setValue error message. masstranAIM fix. (detail)
    by galbramc
  181. fix of design variables (detail)
    by ryan
  182. fix of design variables (detail)
    by ryan
  183. fix of design variables (detail)
    by ryan
  184. fix of design variables (detail)
    by ryan
  185. add cvxopt debug messages (detail)
    by dongjoon
  186. add more debugging statements (detail)
    by dongjoon
  187. add debugging corsairlite statements
    (detail)
    by dongjoon
  188. update corsairlite example for debugging (detail)
    by dongjoon
  189. scan-build fixes (detail)
    by galbramc
  190. Suppress warning (detail)
    by galbramc
  191. Update cyli_box example with semi-colon separated capsGroup tags (detail)
    by galbramc
  192. Add print statements for debugging (detail)
    by dongjoon
  193. add more debugOutput statements to show timing in SLCP (detail)
    by dongjoon
  194. Fix skipping geometry Design_Variable in TACS (detail)
    by galbramc
  195. More attempts at fixing the exodus makefile (detail)
    by galbramc
  196. Stanalizer fix (detail)
    by galbramc
  197. Finally got netcdf.h check correct on both macOS and Linux (detail)
    by galbramc
  198. Another sanitizer fix (detail)
    by galbramc
  199. sanitizer fixes (detail)
    by galbramc
  200. Check for exodusWriter when running plato examples (detail)
    by galbramc
  201. Write out surface to volume index map for plato (detail)
    by galbramc
  202. Lint fix for mses (detail)
    by galbramc
  203. Fix output redirect for detecing netcdf.h (detail)
    by galbramc
  204. Update fun3d test to Mesh_Morph. Add first plato mesh generation examples. (detail)
    by galbramc
  205. Allow tetgen to write MultiDomain mesh files. Updates to Exodus mesh writer. (detail)
    by galbramc
  206. More checks when reading mapbc files in aimMesh (detail)
    by galbramc
  207. Fun3D lint fixes (detail)
    by galbramc
  208. fix - unused variables (detail)
    by ryan
  209. fix - null catch in avlaim (detail)
    by ryan
  210. fix fun3d morphing (detail)
    by ryan
  211. Lint fixes (detail)
    by galbramc
  212. Warning fix (detail)
    by galbramc
  213. Fix last commit (detail)
    by galbramc
  214. Fix waring and add missing files (detail)
    by galbramc
  215. Support tetgen generated regions (detail)
    by galbramc
  216. More lint fixes (detail)
    by galbramc
  217. Fix lint warnings (detail)
    by galbramc
  218. Update Makefile for plato. Add element group names for aflr3 and tetgen. (detail)
    by galbramc
  219. Add plato skeleton AIM (detail)
    by galbramc
  220. Initial cut at an exodus writer (detail)
    by galbramc
  221. Fix for incorrect Design_Variable in masstranAIM (detail)
    by galbramc
  222. Allow unconverged SmoothUV status to continue during parameterization (detail)
    by haimes
  223. Fix masstran derivatives with multiple bodies (detail)
    by galbramc
  224. Fix closeBound to write bound and vertexset files for journaling (detail)
    by haimes
  225. fix typo in corsairlite slcp (detail)
    by dongjoon
  226. delete redundant kulfan csm and finalize multifidelity scripts (detail)
    by dongjoon
  227. Fix warnings from last commit (detail)
    by galbramc
  228. small fix on Kulfan MSES wrapper and removing remnants of full corsair (detail)
    by dongjoon
  229. Remove some depricated checks (detail)
    by galbramc
  230. Journal the writing of files (detail)
    by haimes
  231. Move up setting outLevel (detail)
    by galbramc
  232. Use ocsmLoadFromModel for static geometry. Expost stepSize for finite differnce in pyCAPS. (detail)
    by galbramc
  233. Add the ability to control the sensitivity finite-difference step size from CAPS proper (detail)
    by haimes
  234. Remove old html doc before copying (detail)
    by galbramc
  235. Update cart3dAIM dox (detail)
    by galbramc
  236. Update pyCAPS dox dependencies (detail)
    by galbramc
  237. update corsairlite files to python3.8 compatible (detail)
    by dongjoon
  238. Use TIM viewer in pyCAPS view methods (detail)
    by galbramc
  239. Allow ftype=None for FieldIn/FieldOut data sets (detail)
    by galbramc
  240. update corsairlite slcp wrapper with speed-up updates (detail)
    by dongjoon
  241. Move DESPMTR check into just TACS (detail)
    by galbramc
  242. Don't write DESPMTR to bdf files (detail)
    by galbramc
  243. Fix segFault from last commit, again (detail)
    by haimes
  244. Fix segFault from last commit (detail)
    by haimes
  245. First cut at using MD5 checksums to check API inputs for continuation mode (detail)
    by haimes
  246. Fix masstran memory leak (detail)
    by galbramc
  247. masstran AIM updates (detail)
    by galbramc
  248. Another OCSM FD sensitivity update (detail)
    by haimes
  249. The calling sequence (SetDtime) was wrong and should be after setting the parameter when calculating sensitivities (detail)
    by haimes
  250. add some debugging output capabilities to corsairlite and properly pass problemObj in Kulfan.py (detail)
    by dongjoon
  251. Compile fix for Windoze (detail)
    by galbramc
  252. Fix continuation with a function that returned an error (detail)
    by galbramc
  253. Fix memory leak (detail)
    by galbramc
  254. Fix masstran units and warning (detail)
    by galbramc
  255. Update aim_copyValue (detail)
    by galbramc
  256. Add geometric sensitvities to masstran AIM (detail)
    by galbramc
  257. Suppress 'could not create compact unwind on M1' for now. (detail)
    by galbramc
  258. Allow for FD sensitivities within the AIM sensitivity functions (detail)
    by haimes
  259. add torch tests for kulfan corsairlite examples (detail)
    by dongjoon
  260. update problem.__init__ to work if running pyscript but not from capsMode (detail)
    by jfdannen
  261. Simplify multifidelity examples. Fig unit bug in caps.py. Support pint dimensionless to caps.py. Support udunits import in corsairlite. (detail)
    by galbramc
  262. Fix typo in comment (detail)
    by haimes
  263. Fix multifidelity corsairlite examples (detail)
    by dongjoon
  264. Another cart3d twist example fix (detail)
    by galbramc
  265. Cart3D example fixes (detail)
    by galbramc
  266. Support Cart3D preSpec inputs and bodies. (detail)
    by galbramc
  267. Forgot the pickle (detail)
    by galbramc
  268. One more makefile fix (detail)
    by galbramc
  269. corsair lite makefile example fix (detail)
    by galbramc
  270. Dissable failing corsair examples again (detail)
    by galbramc
  271. Fix corsairlite execution script (detail)
    by galbramc
  272. Fix uninitialized journaling (detail)
    by galbramc
  273. Run all phasing examples for corsairlite (detail)
    by galbramc
  274. corsair fix for Python 3.10. Minor pyCAPS warning fix. (detail)
    by galbramc
  275. Fix scan-build warning (detail)
    by galbramc
  276. Fix for aim_relPath. Fix for sheet bodies with aim_storeMeshRef. (detail)
    by galbramc
  277. fix morph example (detail)
    by ryan
  278. Fix last commit (detail)
    by galbramc
  279. Fix pyCAPS getValue for string and pointers (detail)
    by galbramc
  280. Fix destroy_aimStorage to resolve segfault (detail)
    by galbramc
  281. lint fixes (detail)
    by galbramc
  282. I think we have mighty morphing powers (detail)
    by galbramc
  283. test/fix morph (detail)
    by ryan
  284. Skip wake with morphing for now. (detail)
    by galbramc
  285. Fixes for mighty morphing powers, still needs some more testing. (detail)
    by galbramc
  286. fix missing file (detail)
    by ryan
  287. fix missing file (detail)
    by ryan
  288. // This software has been cleared for public release on 05 Nov 2020, case number 88ABW-2020-3462.

    #include <string.h>
    #include <stdio.h>
    #include <errno.h>
    #include <ctype.h>

    #include "egads.h"        // Bring in egads utilss
    #include "capsTypes.h"    // Bring in CAPS types
    #include "aimUtil.h"      // Bring in AIM utils
    #include "aimMesh.h"      // Bring in AIM meshing

    #include "miscUtils.h"    // Bring in misc. utility functions
    #include "meshUtils.h"    // Bring in meshing utility functions
    #include "cfdTypes.h"     // Bring in cfd specific types
    #include "cfdUtils.h"
    #include "tecplotUtils.h" // Bring in tecplot utility functions
    #include "fun3dUtils.h"   // Bring in fun3d utility header
    #include "fun3dInputs.h"
    #include "ugridWriter.h"


    #ifdef WIN32
    #define strcasecmp  stricmp
    #define strncasecmp _strnicmp
    #endif


    // Extract the FEPOINT Tecoplot data from a FUN3D Aero-Loads file (connectivity is ignored) - dataMatrix = [numVariable][numDataPoint]
    int fun3d_readAeroLoad(void *aimInfo, char *filename, int *numVariable, char **variableName[],
                           int *numDataPoint, double ***dataMatrix)
    {

        int status = CAPS_SUCCESS; // Function return
        int i, j; // Indexing

        size_t linecap = 0;

        char *line = NULL; // Temporary line holder
        char *tempStr = NULL, *tempStr2 = NULL; // Temporary strings
        int stringLen = 0; // Length of string holder

        FILE *fp = NULL; // File pointer

        // Open file
        fp = aim_fopen(aimInfo, filename, "r");
        if (fp == NULL) {
            AIM_ERROR(aimInfo, "Unable to open file: %s\n", filename);
            return CAPS_IOERR;
        }

        printf("Reading FUN3D AeroLoad File - %s!!!!!!\n", filename);

        *numVariable = 0;
        *numDataPoint = 0;
        // Loop through file line by line until we have determined how many variables and data points there are
        while (*numVariable == 0 || *numDataPoint == 0) {

            // Get line from file
            status = getline(&line, &linecap, fp);
            if ((status < 0) || (line == NULL)) break;

            // Get variable list if available in file line
            if (strncmp("variables=", line, strlen("variables=")) == 0) {

                // Pull out substring at first occurrence of "
                tempStr = strstr(line, "\"");

                // Create a temperory string of the variables in a the folling format - ["a","ae"]
                stringLen  = strlen(tempStr)-1 + 2;

                tempStr2 = (char *) EG_alloc((stringLen +1)*sizeof(char *));
                if (tempStr2 == NULL) {
                    fclose(fp);
                    if (line != NULL) EG_free(line);
                    return EGADS_MALLOC;
                }

                tempStr2[0] = '[';
                strncpy(tempStr2+1, tempStr, strlen(tempStr)-1);
                tempStr2[stringLen-1] = ']';
                tempStr2[stringLen] = '\0';

                // Sort string into an array of strings
                status =  string_toStringDynamicArray(tempStr2, numVariable, variableName);

                if (tempStr2 != NULL) EG_free(tempStr2);
                tempStr2 = NULL;

                if (status != CAPS_SUCCESS) goto cleanup;

                // Print out list of variables found in load file
                printf("Variables found in file %s:\n",filename);
                for (i = 0; i < *numVariable; i++) printf("Variable %d = %s\n", i, (*variableName)[i]);
            }

            // Get the number of data points in file if available in file line
            if (strncmp("zone t=", line, strlen("zone t=")) == 0) {

                // Pull out substring at first occurrence of i=
                tempStr = strstr(line, "i=");

                // Retrieve the i= value
                sscanf(&tempStr[2], "%d", numDataPoint);

                // Print out the number of data points found in load file
                printf("Number of data points = %d, in file %s\n", *numDataPoint, filename);
            }

        }

        if (*numVariable != 0 && *numDataPoint != 0) {

            // Allocate dataMatrix array
            AIM_FREE(*dataMatrix);

            AIM_ALLOC(*dataMatrix, (*numVariable), double *, aimInfo, status);
            for (i = 0; i < *numVariable; i++) (*dataMatrix)[i] = NULL;

            for (i = 0; i < *numVariable; i++) {
                AIM_ALLOC((*dataMatrix)[i], (*numDataPoint), double, aimInfo, status);
            }

            // Loop through the file and fill up the data matrix
            for (j = 0; j < *numDataPoint; j++) {
                for (i = 0; i < *numVariable; i++) {
                    fscanf(fp, "%lf", &(*dataMatrix)[i][j]);
                }
            }

            // Output the first row of the dataMatrix
            //for (i = 0; i < *numVariable; i++) printf("Variable %d - %.6f\n", i, (*dataMatrix)[i][0]);

        } else {

            printf("No data values extracted from file - %s",filename);
            status = CAPS_BADVALUE;
        }

    cleanup:
        if (fp != NULL) fclose(fp);

        if (status != CAPS_SUCCESS) {
          if (*dataMatrix != NULL) {
            for (j = 0; j < *numVariable; j++) {
              AIM_FREE((*dataMatrix)[j]);
            }
            AIM_FREE((*dataMatrix));
          }
        }

        EG_free(line);
        return status;
    }


    static int
    fun3d_read2DBinaryUgrid(void *aimInfo, FILE *fp, meshStruct *surfaceMesh)
    {
      int    status = CAPS_SUCCESS;

      int    numNode, numLine, numTriangle, numQuadrilateral;
      int    numTetrahedral, numPyramid, numPrism, numHexahedral;
      int    i, elementIndex, numPoint, bcID;
      double *coords = NULL;

      /* we get a binary UGRID file */
      status = fread(&numNode,          sizeof(int), 1, fp);
      if (status != 1) { status = CAPS_IOERR; AIM_STATUS(aimInfo, status); }
      status = fread(&numTriangle,      sizeof(int), 1, fp);
      if (status != 1) { status = CAPS_IOERR; AIM_STATUS(aimInfo, status); }
      status = fread(&numQuadrilateral, sizeof(int), 1, fp);
      if (status != 1) { status = CAPS_IOERR; AIM_STATUS(aimInfo, status); }
      status = fread(&numTetrahedral,   sizeof(int), 1, fp);
      if (status != 1) { status = CAPS_IOERR; AIM_STATUS(aimInfo, status); }
      status = fread(&numPyramid,       sizeof(int), 1, fp);
      if (status != 1) { status = CAPS_IOERR; AIM_STATUS(aimInfo, status); }
      status = fread(&numPrism,         sizeof(int), 1, fp);
      if (status != 1) { status = CAPS_IOERR; AIM_STATUS(aimInfo, status); }
      status = fread(&numHexahedral,    sizeof(int), 1, fp);
      if (status != 1) { status = CAPS_IOERR; AIM_STATUS(aimInfo, status); }

      if ( numTetrahedral   +
           numPyramid       +
           numPrism         +
           numHexahedral  > 0) {
        AIM_ERROR(aimInfo, "Expecting a 2D ugrid file!!!");
        status = CAPS_IOERR;
        goto cleanup;
      }

      /*
      printf("\n Header from UGRID file: %d  %d %d  %d %d %d %d\n", numNode,
             numTriangle, numQuadrilateral, numTetrahedral, numPyramid, numPrism,
             numHexahedral);
       */

      AIM_ALLOC(coords, 3*numNode, double, aimInfo, status);

      /* read all of the vertices */
      status = fread(coords, sizeof(double), 3*numNode, fp);
      if (status != 3*numNode) { status = CAPS_IOERR; AIM_STATUS(aimInfo, status); }

      surfaceMesh->analysisType = UnknownMeshAnalysis;

      // Set that this is a volume mesh
      surfaceMesh->meshType = Surface2DMesh;

      // Numbers
      surfaceMesh->numNode = numNode;
      surfaceMesh->numElement = numTriangle + numQuadrilateral;

      surfaceMesh->meshQuickRef.useStartIndex = (int) true;

      surfaceMesh->meshQuickRef.numTriangle      = numTriangle;
      surfaceMesh->meshQuickRef.numQuadrilateral = numQuadrilateral;

      // Nodes - allocate
      AIM_ALLOC(surfaceMesh->node, surfaceMesh->numNode, meshNodeStruct, aimInfo, status);

      // Initialize
      for (i = 0; i < surfaceMesh->numNode; i++) {
          status = initiate_meshNodeStruct(&surfaceMesh->node[i],
                                            surfaceMesh->analysisType);
          AIM_STATUS(aimInfo, status);
      }

      // Nodes - set
      for (i = 0; i < surfaceMesh->numNode; i++) {

        // Copy node data
        surfaceMesh->node[i].nodeID = i+1;

        surfaceMesh->node[i].xyz[0] = coords[3*i+0];
        surfaceMesh->node[i].xyz[1] = coords[3*i+1];
        surfaceMesh->node[i].xyz[2] = coords[3*i+2];
      }
      AIM_FREE(coords);

      // Elements - allocate
      AIM_ALLOC(surfaceMesh->element, surfaceMesh->numElement, meshElementStruct, aimInfo, status);

      // Initialize
      for (i = 0; i < surfaceMesh->numElement; i++ ) {
          status = initiate_meshElementStruct(&surfaceMesh->element[i],
                                               surfaceMesh->analysisType);
          AIM_STATUS(aimInfo, status);
      }

      // Start of element index
      elementIndex = 0;

      // Elements -Set triangles
      if (numTriangle > 0)
        surfaceMesh->meshQuickRef.startIndexTriangle = elementIndex;

      numPoint = mesh_numMeshConnectivity(Triangle);
      for (i = 0; i < numTriangle; i++) {

          surfaceMesh->element[elementIndex].elementType = Triangle;
          surfaceMesh->element[elementIndex].elementID   = elementIndex+1;

          status = mesh_allocMeshElementConnectivity(&surfaceMesh->element[elementIndex]);
          if (status != CAPS_SUCCESS) goto cleanup;

          // read the element connectivity
          status = fread(surfaceMesh->element[elementIndex].connectivity,
                         sizeof(int), numPoint, fp);
          if (status != numPoint) { status = CAPS_IOERR; AIM_STATUS(aimInfo, status); }

          elementIndex += 1;
      }

      // Elements -Set quadrilateral
      if (numQuadrilateral > 0)
        surfaceMesh->meshQuickRef.startIndexQuadrilateral = elementIndex;

      numPoint = mesh_numMeshConnectivity(Quadrilateral);
      for (i = 0; i < numQuadrilateral; i++) {

          surfaceMesh->element[elementIndex].elementType = Quadrilateral;
          surfaceMesh->element[elementIndex].elementID   = elementIndex+1;

          status = mesh_allocMeshElementConnectivity(&surfaceMesh->element[elementIndex]);
          if (status != CAPS_SUCCESS) goto cleanup;

          // read the element connectivity
          status = fread(surfaceMesh->element[elementIndex].connectivity,
                         sizeof(int), numPoint, fp);
          if (status != numPoint) { status = CAPS_IOERR; AIM_STATUS(aimInfo, status); }

          elementIndex += 1;
      }

      // skip face ID section of the file
      status = fseek(fp, (numTriangle + numQuadrilateral)*sizeof(int), SEEK_CUR);
      if (status != 0) { status = CAPS_IOERR; AIM_STATUS(aimInfo, status); }

      // Get the number of Line elements
      status = fread(&numLine, sizeof(int), 1, fp);
      if (status != 1) { status = CAPS_IOERR; AIM_STATUS(aimInfo, status); }

      // Elements - re-allocate with Line elements
      surfaceMesh->meshQuickRef.numLine = numLine;
      AIM_REALL(surfaceMesh->element, surfaceMesh->numElement+numLine, meshElementStruct, aimInfo, status);

      surfaceMesh->meshQuickRef.startIndexLine = elementIndex;

      // Initialize
      for (i = surfaceMesh->numElement; i < surfaceMesh->numElement+numLine; i++ ) {
          status = initiate_meshElementStruct(&surfaceMesh->element[i],
                                               surfaceMesh->analysisType);
          AIM_STATUS(aimInfo, status);
      }
      surfaceMesh->numElement += numLine;

      numPoint = mesh_numMeshConnectivity(Line);
      for (i = 0; i < numLine; i++) {

        surfaceMesh->element[elementIndex].elementType = Line;
        surfaceMesh->element[elementIndex].elementID   = elementIndex+1;

        status = mesh_allocMeshElementConnectivity(&surfaceMesh->element[elementIndex]);
        AIM_STATUS(aimInfo, status);

        // read the element connectivity
        status = fread(surfaceMesh->element[elementIndex].connectivity,
                       sizeof(int), numPoint, fp);
        if (status != numPoint) { status = CAPS_IOERR; AIM_STATUS(aimInfo, status); }
        status = fread(&bcID, sizeof(int), 1, fp);
        if (status != 1) { status = CAPS_IOERR; AIM_STATUS(aimInfo, status); }

        surfaceMesh->element[elementIndex].markerID = bcID;

        elementIndex += 1;
      }

      status = CAPS_SUCCESS;

      cleanup:
          if (status != CAPS_SUCCESS)
            printf("Premature exit in getUGRID status = %d\n", status);

          EG_free(coords); coords = NULL;

          return status;
    }


    // Create a 3D BC for FUN3D from a 2D mesh
    int fun3d_2DBC(void *aimInfo,
                   cfdBoundaryConditionStruct *bcProps)
    {
        int status; // Function return status

        int i; // Indexing

        int faceBCIndex = -1, extrusionBCIndex = -1;

        // Find the faceBCIndex for the symmetry plane
        for (i = 0; i < bcProps->numSurfaceProp-1; i++) {
          if (bcProps->surfaceProp[i].surfaceType == Symmetry) {
            faceBCIndex = bcProps->surfaceProp[i].bcID;
            break;
          }
        }

        if (faceBCIndex == -1) {
          // Add plane boundary condition
          AIM_REALL(bcProps->surfaceProp, bcProps->numSurfaceProp+1, cfdSurfaceStruct, aimInfo, status);
          bcProps->numSurfaceProp += 1;

          status = initiate_cfdSurfaceStruct(&bcProps->surfaceProp[bcProps->numSurfaceProp-1]);
          AIM_STATUS(aimInfo, status);

          bcProps->surfaceProp[bcProps->numSurfaceProp-1].surfaceType = Symmetry;
          bcProps->surfaceProp[bcProps->numSurfaceProp-1].symmetryPlane = 1;

          // Find largest index value for bcID and set it plus 1 to the new surfaceProp
          for (i = 0; i < bcProps->numSurfaceProp-1; i++) {
              if (bcProps->surfaceProp[i].bcID >= faceBCIndex) {
                faceBCIndex = bcProps->surfaceProp[i].bcID + 1;
              }
          }
          bcProps->surfaceProp[bcProps->numSurfaceProp-1].bcID = faceBCIndex;
        }


        // Add extruded plane boundary condition
        AIM_REALL(bcProps->surfaceProp, bcProps->numSurfaceProp+1, cfdSurfaceStruct, aimInfo, status);
        bcProps->numSurfaceProp += 1;

        status = initiate_cfdSurfaceStruct(&bcProps->surfaceProp[bcProps->numSurfaceProp-1]);
        AIM_STATUS(aimInfo, status);

        bcProps->surfaceProp[bcProps->numSurfaceProp-1].surfaceType = Symmetry;
        bcProps->surfaceProp[bcProps->numSurfaceProp-1].symmetryPlane = 2;

        // Find largest index value for bcID and set it plus 1 to the new surfaceProp
        for (i = 0; i < bcProps->numSurfaceProp-1; i++) {
            if (bcProps->surfaceProp[i].bcID >= extrusionBCIndex) {
              extrusionBCIndex = bcProps->surfaceProp[i].bcID + 1;
            }
        }
        bcProps->surfaceProp[bcProps->numSurfaceProp-1].bcID = extrusionBCIndex;

        status = CAPS_SUCCESS;

    cleanup:
        return status;
    }


    // Create a 3D mesh for FUN3D from a 2D mesh
    int fun3d_2DMesh(void *aimInfo,
                     aimMeshRef *meshRef,
                     const char *projectName,
                     const mapAttrToIndexStruct *groupMap)
    {

        int status; // Function return status

        int i; // Indexing

        int faceBCIndex = -1, extrusionBCIndex = -1;

        double extrusion = -1.0; // Extrusion length

        // Flip coordinates
        int xMeshConstant = (int) true, yMeshConstant = (int) true, zMeshConstant= (int) true; // 2D mesh checks
        double tempCoord;

        meshStruct surfaceMesh;
        meshStruct volumeMesh;

        char filename[PATH_MAX];
    //    int elementIndex;
        FILE *fp = NULL;

        status = initiate_meshStruct(&surfaceMesh);
        AIM_STATUS(aimInfo, status);

        status = initiate_meshStruct(&volumeMesh);
        AIM_STATUS(aimInfo, status);

        sprintf(filename, "%s%s", meshRef->fileName, MESHEXTENSION);

        fp = fopen(filename, "rb");
        if (fp == NULL) {
          AIM_ERROR(aimInfo, "Cannot open file: %s\n", filename);
          status = CAPS_IOERR;
          goto cleanup;
        }

        status = fun3d_read2DBinaryUgrid(aimInfo, fp, &surfaceMesh);
        AIM_STATUS(aimInfo, status);

        // add boundary elements if they are missing
        if (surfaceMesh.meshQuickRef.numLine == 0) {
            status = mesh_addTess2Dbc(aimInfo, &surfaceMesh, groupMap);
            if (status != CAPS_SUCCESS) goto cleanup;
        }

        // Set the symmetry index for all Tri/Quad
        for (i = 0; i < surfaceMesh.numElement; i++) {

            if (surfaceMesh.element[i].elementType != Triangle &&
                surfaceMesh.element[i].elementType != Quadrilateral) {
                continue;
            }

            surfaceMesh.element[i].markerID = faceBCIndex;
        }

    #ifdef I_DONT_THINK_WE_NEED_THIS
        // Determine a suitable boundary index of the extruded plane
        *extrusionBCIndex = faceBCIndex;
        for (i = 0; i < surfaceMesh.meshQuickRef.numLine; i++) {

            if (surfaceMesh.meshQuickRef.startIndexLine >= 0) {
                elementIndex = surfaceMesh.meshQuickRef.startIndexLine + i;
            } else {
                elementIndex = surfaceMesh.meshQuickRef.listIndexLine[i];
            }

            marker = surfaceMesh.element[elementIndex].markerID;

            if (marker > *extrusionBCIndex)  {
                *extrusionBCIndex = marker;
            }
        }
        *extrusionBCIndex += 1;
    #endif

        // Check to make sure the face is on the y = 0 plane
        for (i = 0; i < surfaceMesh.numNode; i++) {

            if (surfaceMesh.node[i].xyz[1] != 0.0) {
                printf("\nSurface mesh is not on y = 0.0 plane, FUN3D could fail during execution for this 2D mesh!!!\n");
                break;
            }
        }

        // Constant x?
        for (i = 0; i < surfaceMesh.numNode; i++) {
            if ((surfaceMesh.node[i].xyz[0] - surfaceMesh.node[0].xyz[0]) > 1E-7) {
                xMeshConstant = (int) false;
                break;
            }
        }

        // Constant y?
        for (i = 0; i < surfaceMesh.numNode; i++) {
            if ((surfaceMesh.node[i].xyz[1] - surfaceMesh.node[0].xyz[1] ) > 1E-7) {
                yMeshConstant = (int) false;
                break;
            }
        }

        // Constant z?
        for (i = 0; i < surfaceMesh.numNode; i++) {
            if ((surfaceMesh.node[i].xyz[2] - surfaceMesh.node[0].xyz[2]) > 1E-7) {
                zMeshConstant = (int) false;
                break;
            }
        }

        if (yMeshConstant != (int) true) {
            printf("FUN3D expects 2D meshes be in the x-z plane... attempting to rotate mesh!\n");

            if (xMeshConstant == (int) true && zMeshConstant == (int) false) {
                printf("Swapping y and x coordinates!\n");
                for (i = 0; i < surfaceMesh.numNode; i++) {
                    tempCoord = surfaceMesh.node[i].xyz[0];
                    surfaceMesh.node[i].xyz[0] = surfaceMesh.node[i].xyz[1];
                    surfaceMesh.node[i].xyz[1] = tempCoord;
                }

            } else if(xMeshConstant == (int) false && zMeshConstant == (int) true) {

                printf("Swapping y and z coordinates!\n");
                for (i = 0; i < surfaceMesh.numNode; i++) {
                    tempCoord = surfaceMesh.node[i].xyz[2];
                    surfaceMesh.node[i].xyz[2] = surfaceMesh.node[i].xyz[1];
                    surfaceMesh.node[i].xyz[1] = tempCoord;
                }

            } else {
                AIM_ERROR(aimInfo, "Unable to rotate mesh!\n");
                status = CAPS_NOTFOUND;
                goto cleanup;
            }
        }

        status = extrude_SurfaceMesh(extrusion, extrusionBCIndex, &surfaceMesh, &volumeMesh);
        AIM_STATUS(aimInfo, status);

        strcpy(filename, projectName);

        // Write AFLR3
    /*@-nullpass@*/
         status = mesh_writeAFLR3(aimInfo, filename,
                                  0, // write binary file
                                  &volumeMesh,
                                  1.0);
    /*@+nullpass@*/
         AIM_STATUS(aimInfo, status);

        status = CAPS_SUCCESS;

    cleanup:
        if (status != CAPS_SUCCESS) {
            printf("Error: Premature exit in fun3d_2DMesh status = %d\n", status);
        }

    /*@-dependenttrans@*/
        if (fp != NULL) fclose(fp);
    /*@+dependenttrans@*/

        // Destroy meshes
        (void) destroy_meshStruct(&surfaceMesh);
        (void) destroy_meshStruct(&volumeMesh);

        return status;
    }


    // Remove unused nodes from dataMatrix and update connectivity matrix
    static int fun3d_removeUnused(void *aimInfo, int numVariable, int *numNode,  int used[],
                                  double ***data, /*@null@*/ int *numConnect,
                                  /*@null@*/ int *dataConnectMatrix)
    {
        int i, j, k; //Indexing
        int status;

        int *usedNode=NULL; // Freeable

        double **dataMatrix;

        dataMatrix = *data;

        // Copy used node array
        usedNode = (int *) EG_alloc(*numNode*sizeof(int));
        if (usedNode == NULL) {
            status = EGADS_MALLOC;
            goto cleanup;
        }
        for (i = 0; i < *numNode; i++) usedNode[i] = used[i];

        // Remove unused nodes
        j = 0;
        for (i = 0; i< *numNode; i++ ) {
            if (usedNode[i] == (int) false || usedNode[i] < 0) continue;

            usedNode[i] = j+1; // Set i-th node to essentially the node ID,  1-bias

            j +=1;
        }

        j = 0;
        for (i = 0; i< *numNode; i++ ) {
            if (usedNode[i] == (int) false || usedNode[i] < 0) continue;

            for (k = 0; k < numVariable; k++) {
                dataMatrix[k][j] = dataMatrix[k][i]; //Re-order dataMatrix - bubbling i'th index to j
            }

            j += 1;
        }

        *numNode = j; // New number of nodes

        // Redo connectivity
        if (dataConnectMatrix != NULL) {
            AIM_NOTNULL(numConnect, aimInfo, status);
            j = 0;
            for (i = 0; i < *numConnect; i++) {

                if (usedNode[dataConnectMatrix[4*i+ 0]-1] == (int) false) continue;
                if (usedNode[dataConnectMatrix[4*i+ 1]-1] == (int) false) continue;
                if (usedNode[dataConnectMatrix[4*i+ 2]-1] == (int) false) continue;
                if (usedNode[dataConnectMatrix[4*i+ 3]-1] == (int) false) continue;

                for (k = 0; k < 4; k++) {
                   dataConnectMatrix[4*j+ k] = usedNode[dataConnectMatrix[4*i+ k]-1];
                }

                j += 1;
            }

            *numConnect = j; // New number of elements
        }

        status = CAPS_SUCCESS;

    cleanup:
        if (status != CAPS_SUCCESS)
            printf("Error: Premature exit in fun3d_removeUnused status = %d\n",
                   status);

        if (usedNode != NULL) EG_free(usedNode);
        return status;
    }


    // Write FUN3D data transfer files
    int fun3d_dataTransfer(void *aimInfo,
                           const char *projectName,
                           const mapAttrToIndexStruct *groupMap,
                           const cfdBoundaryConditionStruct bcProps,
                           aimMeshRef *meshRef,
                           /*@null@*/ cfdModalAeroelasticStruct *eigenVector)
    {

        /*! \page dataTransferFUN3D FUN3D Data Transfer
         *
         * \section dataToFUN3D Data transfer to FUN3D (FieldIn)
         *
         * <ul>
         *  <li> <B>"Displacement"</B> </li> <br>
         *   Retrieves nodal displacements (as from a structural solver)
         *   and updates FUN3D's surface mesh; a new [project_name]_body1.dat file is written out which may
         *   be loaded into FUN3D to update the surface mesh/move the volume mesh using the FUN3D command line option
         *   -\-read_surface_from_file
         * </ul>
         *
         * <ul>
         *  <li> <B>"EigenVector_#"</B> </li> <br>
         *   Retrieves modal eigen-vectors from a structural solver, where "#" should be replaced by the
         *   corresponding mode number for the eigen-vector (eg. EigenVector_3 would correspond to the third mode,
         *   while EigenVector_6 would be the sixth mode) . A [project_name]_body1_mode#.dat file is written
         *   out for each mode.
         * </ul>
         *
         */

        int status; // Function return status
        int i, j, ibound, ibody, iface, iglobal, eigenIndex; // Indexing

        int stringLength = 0;

        char *filename = NULL;

        // Discrete data transfer variables
        capsDiscr *discr;
        char **boundName = NULL;
        int numBoundName = 0;
        enum capsdMethod dataTransferMethod;
        int numDataTransferPoint;
        int dataTransferRank;
        double *dataTransferData;
        char   *units;

        int state, nGlobal, *globalOffset=NULL, nFace;
        ego body, *faces=NULL;

        int alen, ntri, atype, itri, ielem;
        const double *face_xyz, *face_uv, *reals;
        const int *face_ptype, *face_pindex, *face_tris, *face_tric, *nquad=NULL;
        const char *string, *groupName = NULL;

        // Variables used in global node mapping
        int ptype, pindex;
        double xyz[3];

        // Data transfer Out variables
        const char *dataOutName[] = {"x","y","z", "id", "dx", "dy", "dz"};
        const int dataOutFormat[] = {Double, Double, Double, Integer, Double, Double, Double};

        double **dataOutMatrix = NULL;
        int *dataConnectMatrix = NULL;

        int numOutVariable = 7;
        int numOutDataPoint = 0;
        int numOutDataConnect = 0;

        const char fileExtBody[] = "_body1";
        const char fileExt[] = ".dat";
        const char fileExtMode[] = "_mode";

        int foundDisplacement = (int) false, foundEigenVector = (int) false;

        int marker;

        int numUsedNode = 0, numUsedConnectivity = 0, usedElems;
        int *usedNode = NULL;

        status = aim_getBounds(aimInfo, &numBoundName, &boundName);
        AIM_STATUS(aimInfo, status);

        foundDisplacement = foundEigenVector = (int) false;
        for (ibound = 0; ibound < numBoundName; ibound++) {
          AIM_NOTNULL(boundName, aimInfo, status);

          status = aim_getDiscr(aimInfo, boundName[ibound], &discr);
          if (status != CAPS_SUCCESS) continue;

          status = aim_getDataSet(discr,
                                  "Displacement",
                                  &dataTransferMethod,
                                  &numDataTransferPoint,
                                  &dataTransferRank,
                                  &dataTransferData,
                                  &units);

          if (status == CAPS_SUCCESS) { // If we do have data ready is the rank correct

            foundDisplacement = (int) true;

            if (dataTransferRank != 3) {
              AIM_ERROR(aimInfo, "Displacement transfer data found however rank is %d not 3!!!!\n", dataTransferRank);
              status = CAPS_BADRANK;
              goto cleanup;
            }
            break;
          }

          if (eigenVector != NULL) {
            for (eigenIndex = 0; eigenIndex < eigenVector->numEigenValue; eigenIndex++) {

              status = aim_getDataSet(discr,
                                      eigenVector->eigenValue[eigenIndex].name,
                                      &dataTransferMethod,
                                      &numDataTransferPoint,
                                      &dataTransferRank,
                                      &dataTransferData,
                                      &units);

              if (status == CAPS_SUCCESS) { // If we do have data ready is the rank correct

                foundEigenVector = (int) true;

                if (dataTransferRank != 3) {
                  AIM_ERROR(aimInfo, "EigenVector transfer data found however rank is %d not 3!!!!\n", dataTransferRank);
                  status = CAPS_BADRANK;
                  goto cleanup;
                }
                break;
              }
            } // Loop through EigenValues

            if (foundEigenVector == (int) true) break;

          } // If eigen-vectors provided
        } // Loop through transfer names

        if (foundDisplacement != (int) true && foundEigenVector != (int) true) {
          printf("Info: No recognized data transfer names found.\n");
          status = CAPS_NOTFOUND;
          goto cleanup;
        }

        // Ok looks like we have displacements/EigenVectors to get so lets continue
        printf("Writing FUN3D data transfer files\n");

        // Allocate data arrays that are going to be output
        AIM_ALLOC(dataOutMatrix, numOutVariable, double*, aimInfo, status);
        for (i = 0; i < numOutVariable; i++) dataOutMatrix[i] = NULL;

        AIM_ALLOC(globalOffset, meshRef->nmap+1, int, aimInfo, status);
        numOutDataPoint = 0;
        ielem = 0;
        globalOffset[0] = 0;
        for (i = 0; i < meshRef->nmap; i++) {
          if (meshRef->maps[i].tess == NULL) continue;

          status = EG_statusTessBody(meshRef->maps[i].tess, &body, &state, &nGlobal);
          AIM_STATUS(aimInfo, status);

          // re-allocate data arrays
          for (j = 0; j < numOutVariable; j++) {
            AIM_REALL(dataOutMatrix[j], numOutDataPoint + nGlobal, double, aimInfo, status);
          }
          AIM_REALL(usedNode, numOutDataPoint + nGlobal, int, aimInfo, status);
          for (j = globalOffset[0]; j < numOutDataPoint + nGlobal; j++) usedNode[j] = (int) false;


          for (iglobal = 0; iglobal < nGlobal; iglobal++) {
            status = EG_getGlobal(meshRef->maps[i].tess,
                                  iglobal+1, &ptype, &pindex, xyz);
            AIM_STATUS(aimInfo, status);

            // First just set the Coordinates
            dataOutMatrix[0][globalOffset[i]+iglobal] = xyz[0];
            dataOutMatrix[1][globalOffset[i]+iglobal] = xyz[1];
            dataOutMatrix[2][globalOffset[i]+iglobal] = xyz[2];

            // Volume mesh node ID
            dataOutMatrix[3][globalOffset[i]+iglobal] = meshRef->maps[i].map[iglobal];

            // Delta displacements
            dataOutMatrix[4][i] = 0;
            dataOutMatrix[5][i] = 0;
            dataOutMatrix[6][i] = 0;
          }

          // check if the tessellation has a mixture of quad and tess
          status = EG_attributeRet(meshRef->maps[i].tess, ".mixed",
                                   &atype, &alen, &nquad, &reals, &string);
          if (status != EGADS_SUCCESS &&
              status != EGADS_NOTFOUND) AIM_STATUS(aimInfo, status);

          status = EG_getBodyTopos(body, NULL, FACE, &nFace, &faces);
          AIM_STATUS(aimInfo, status);
          for (iface = 0; iface < nFace; iface++) {
            // get the face tessellation
            status = EG_getTessFace(meshRef->maps[i].tess, iface+1, &alen, &face_xyz, &face_uv,
                                    &face_ptype, &face_pindex, &ntri, &face_tris, &face_tric);
            AIM_STATUS(aimInfo, status);
            AIM_NOTNULL(faces, aimInfo, status);

            status = retrieve_CAPSGroupAttr(faces[iface], &groupName);
            if (status == EGADS_SUCCESS) {
              AIM_NOTNULL(groupName, aimInfo, status);
              status = get_mapAttrToIndexIndex(groupMap, groupName, &marker);
              if (status != CAPS_SUCCESS) {
                AIM_ERROR(aimInfo, "No capsGroup \"%s\" not found in attribute map", groupName);
                goto cleanup;
              }
            } else {
              AIM_ERROR(aimInfo, "No capsGroup on face %d", iface+1);
              print_AllAttr(aimInfo, faces[iface]);
              goto cleanup;
            }

            //  To keep with the moving_bodying input we will assume used nodes are all inviscid and viscous surfaces instead
            //                        usedNode[k] = (int) true;
            usedElems = (int) false;
            for (j = 0; j < bcProps.numSurfaceProp; j++) {
              if (marker != bcProps.surfaceProp[j].bcID) continue;

              if (bcProps.surfaceProp[j].surfaceType == Viscous ||
                  bcProps.surfaceProp[j].surfaceType == Inviscid) {
                  usedElems = (int) true;
              }
              break;
            }

            if (nquad == NULL) { // all triangles

              // re-allocate data arrays
              AIM_REALL(dataConnectMatrix, 4*(numOutDataConnect + ntri), int, aimInfo, status);

              for (itri = 0; itri < ntri; itri++, ielem++) {
                for (j = 0; j < 3; j++) {
                  status = EG_localToGlobal(meshRef->maps[i].tess, iface+1, face_tris[3*itri+j], &iglobal);
                  AIM_STATUS(aimInfo, status);
                  dataConnectMatrix[4*ielem+j] = globalOffset[i] + iglobal;
                  usedNode[globalOffset[i]+iglobal-1] = usedElems;
                }
                // repeat the last node for triangles
                dataConnectMatrix[4*ielem+3] = dataConnectMatrix[4*ielem+2];
              }

              numOutDataConnect += ntri;

            } else { // mixture of tri and quad elements

              // re-allocate data arrays
              AIM_REALL(dataConnectMatrix, 4*(numOutDataConnect + ntri-nquad[iface]), int, aimInfo, status);

              // process triangles
              for (itri = 0; itri < ntri-2*nquad[iface]; itri++, ielem++) {
                for (j = 0; j < 3; j++) {
                  status = EG_localToGlobal(meshRef->maps[i].tess, iface+1, face_tris[3*itri+j], &iglobal);
                  AIM_STATUS(aimInfo, status);
                  dataConnectMatrix[4*ielem+j] = globalOffset[i] + iglobal;
                  usedNode[globalOffset[i]+iglobal-1] = usedElems;
                }
                // repeat the last node for triangle
                dataConnectMatrix[4*ielem+3] = dataConnectMatrix[4*ielem+2];
              }
              // process quads
              for (; itri < ntri; itri++, ielem++) {
                for (j = 0; j < 3; j++) {
                  status = EG_localToGlobal(meshRef->maps[i].tess, iface+1, face_tris[3*itri+j], &iglobal);
                  AIM_STATUS(aimInfo, status);
                  dataConnectMatrix[4*ielem+j] = globalOffset[i] + iglobal;
                  usedNode[globalOffset[i]+iglobal-1] = usedElems;
                }

                // add the last node from the 2nd triangle to make the quad
                itri++;
                status = EG_localToGlobal(meshRef->maps[i].tess, iface+1, face_tris[3*itri+2], &iglobal);
                AIM_STATUS(aimInfo, status);
                dataConnectMatrix[4*ielem+3] = globalOffset[i] + iglobal;
                usedNode[globalOffset[i]+iglobal-1] = usedElems;
              }

              numOutDataConnect += ntri-nquad[iface];
            }

          }
          AIM_FREE(faces);

          numOutDataPoint += nGlobal;
          globalOffset[i+1] = globalOffset[i] + nGlobal;
        }

        // Re-loop through transfers - if we are doing displacements
        if (foundDisplacement == (int) true) {

          for (ibound = 0; ibound < numBoundName; ibound++) {
            AIM_NOTNULL(boundName, aimInfo, status);

            status = aim_getDiscr(aimInfo, boundName[ibound], &discr);
            if (status != CAPS_SUCCESS) continue;

            status = aim_getDataSet(discr,
                                    "Displacement",
                                    &dataTransferMethod,
                                    &numDataTransferPoint,
                                    &dataTransferRank,
                                    &dataTransferData,
                                    &units);
            if (status != CAPS_SUCCESS) continue; // If no elements in this object skip to next transfer name

            if (numDataTransferPoint != discr->nPoints &&
                numDataTransferPoint > 1) {
              AIM_ERROR(aimInfo, "Developer error!! %d != %d", numDataTransferPoint, discr->nPoints);
              status = CAPS_MISMATCH;
              goto cleanup;
            }

            for (i = 0; i < discr->nPoints; i++) {

              ibody   = discr->tessGlobal[2*i+0];
              iglobal = discr->tessGlobal[2*i+1];

              status = EG_getGlobal(discr->bodys[ibody-1].tess,
                                    iglobal, &ptype, &pindex, xyz);
              AIM_STATUS(aimInfo, status);

              // Find the disc tessellation in the original list of tessellations
              for (j = 0; j < meshRef->nmap; j++) {
                if (discr->bodys[ibody-1].tess == meshRef->maps[j].tess) {
                  break;
                }
              }
              if (j == meshRef->nmap) {
                AIM_ERROR(aimInfo, "Could not find matching tessellation!");
                status = CAPS_MISMATCH;
                goto cleanup;
              }

              if (numDataTransferPoint == 1) {
                // A single point means this is an initialization phase

                // Apply delta displacements
                dataOutMatrix[0][globalOffset[j]+iglobal-1] += dataTransferData[0];
                dataOutMatrix[1][globalOffset[j]+iglobal-1] += dataTransferData[1];
                dataOutMatrix[2][globalOffset[j]+iglobal-1] += dataTransferData[2];

                // save delta displacements
                dataOutMatrix[4][globalOffset[j]+iglobal-1] = dataTransferData[0];
                dataOutMatrix[5][globalOffset[j]+iglobal-1] = dataTransferData[1];
                dataOutMatrix[6][globalOffset[j]+iglobal-1] = dataTransferData[2];

              } else {
                // Apply delta displacements
                dataOutMatrix[0][globalOffset[j]+iglobal-1] += dataTransferData[3*i+0];
                dataOutMatrix[1][globalOffset[j]+iglobal-1] += dataTransferData[3*i+1];
                dataOutMatrix[2][globalOffset[j]+iglobal-1] += dataTransferData[3*i+2];

                dataOutMatrix[4][globalOffset[j]+iglobal-1] = dataTransferData[3*i+0];
                dataOutMatrix[5][globalOffset[j]+iglobal-1] = dataTransferData[3*i+1];
                dataOutMatrix[6][globalOffset[j]+iglobal-1] = dataTransferData[3*i+2];
              }
            }
          } // End numBoundName loop

          // Remove unused nodes
          numUsedNode = numOutDataPoint;
          numUsedConnectivity = numOutDataConnect;
          AIM_NOTNULL(usedNode, aimInfo, status);
          status = fun3d_removeUnused(aimInfo, numOutVariable, &numUsedNode, usedNode,
                                      &dataOutMatrix, &numUsedConnectivity,
                                      dataConnectMatrix);
          AIM_STATUS(aimInfo, status);

          stringLength = strlen(projectName) + strlen(fileExtBody) + strlen(fileExt) + 1;
          AIM_ALLOC(filename, stringLength+1, char, aimInfo, status);

          strcpy(filename, projectName);
          strcat(filename, fileExtBody);
          strcat(filename, fileExt);
          filename[stringLength] = '\0';

          // Write out displacement in tecplot file
          /*@-nullpass@*/
          status = tecplot_writeFEPOINT(aimInfo, filename,
                                        "FUN3D AeroLoads",
                                        NULL,
                                        numOutVariable,
                                        (char **)dataOutName,
                                        numUsedNode, // numOutDataPoint,
                                        dataOutMatrix,
                                        dataOutFormat,
                                        numUsedConnectivity, //numOutDataConnect, // numConnectivity
                                        dataConnectMatrix, // connectivity matrix
                                        NULL); // Solution time
          /*@+nullpass@*/
          AIM_STATUS(aimInfo, status);
          AIM_FREE(filename);
        } // End if found displacements

        // Re-loop through transfers - if we are doing eigen-vectors
        if ((foundEigenVector == (int) true) && (eigenVector != NULL)) {

          for (eigenIndex = 0; eigenIndex < eigenVector->numEigenValue; eigenIndex++) {

            // Zero out the eigen-vectors each time we are writing out a new one
            for (i = 0; i < numOutDataPoint; i++ ) {

              // Delta eigen-vectors
              dataOutMatrix[4][i] = 0;
              dataOutMatrix[5][i] = 0;
              dataOutMatrix[6][i] = 0;
            }

            for (ibound = 0; ibound < numBoundName; ibound++) {
              AIM_NOTNULL(boundName, aimInfo, status);

              status = aim_getDiscr(aimInfo, boundName[ibound], &discr);
              if (status != CAPS_SUCCESS) continue;

              status = aim_getDataSet(discr,
                                      eigenVector->eigenValue[eigenIndex].name,
                                      &dataTransferMethod,
                                      &numDataTransferPoint,
                                      &dataTransferRank,
                                      &dataTransferData,
                                      &units);
              if (status != CAPS_SUCCESS) continue; // If no elements in this object skip to next transfer name

              if (numDataTransferPoint != discr->nPoints &&
                  numDataTransferPoint > 1) {
                AIM_ERROR(aimInfo, "Developer error!! %d != %d", numDataTransferPoint, discr->nPoints);
                status = CAPS_MISMATCH;
                goto cleanup;
              }

              for (i = 0; i < discr->nPoints; i++) {

                ibody   = discr->tessGlobal[2*i+0];
                iglobal = discr->tessGlobal[2*i+1];

                // Find the disc tessellation in the original list of tessellations
                for (j = 0; j < meshRef->nmap; j++) {
                  if (discr->bodys[ibody-1].tess == meshRef->maps[j].tess) {
                    break;
                  }
                }
                if (j == meshRef->nmap) {
                  AIM_ERROR(aimInfo, "Could not find matching tessellation!");
                  status = CAPS_MISMATCH;
                  goto cleanup;
                }

                if (numDataTransferPoint == 1) {
                  // A single point means this is an initialization phase

                  // save Eigen-vector
                  dataOutMatrix[4][globalOffset[j]+iglobal-1] = dataTransferData[0];
                  dataOutMatrix[5][globalOffset[j]+iglobal-1] = dataTransferData[1];
                  dataOutMatrix[6][globalOffset[j]+iglobal-1] = dataTransferData[2];

                } else {
                  // save Eigen-vector
                  dataOutMatrix[4][globalOffset[j]+iglobal-1] = dataTransferData[3*i+0];
                  dataOutMatrix[5][globalOffset[j]+iglobal-1] = dataTransferData[3*i+1];
                  dataOutMatrix[6][globalOffset[j]+iglobal-1] = dataTransferData[3*i+2];
                }
              }
            } // End dataTransferDiscreteObj loop

            // Remove unused nodes
            numUsedNode = numOutDataPoint;
            AIM_NOTNULL(usedNode, aimInfo, status);

            if (eigenIndex == 0) {
              numUsedConnectivity = numOutDataConnect;
              status = fun3d_removeUnused(aimInfo, numOutVariable, &numUsedNode,
                                          usedNode, &dataOutMatrix,
                                          &numUsedConnectivity, dataConnectMatrix);
              AIM_STATUS(aimInfo, status);
            } else {
              status = fun3d_removeUnused(aimInfo, numOutVariable, &numUsedNode,
                                          usedNode, &dataOutMatrix, NULL, NULL);
              AIM_STATUS(aimInfo, status);
            }

            stringLength = strlen(projectName) +
                           strlen(fileExtBody) +
                           strlen(fileExtMode) +
                           strlen(fileExt) + 5;

            AIM_ALLOC(filename, stringLength+1, char, aimInfo, status);

            sprintf(filename, "%s%s%s%d%s",
                    projectName,
                    fileExtBody,
                    fileExtMode,  // Change modeNumber so it always starts at 1!
                    eigenIndex+1, // eigenVector->eigenValue[eigenIndex].modeNumber,
                    fileExt);

            // Write out eigen-vector in tecplot file
            /*@-nullpass@*/
            status = tecplot_writeFEPOINT(aimInfo,
                                          filename,
                                          "FUN3D Modal",
                                          NULL,
                                          numOutVariable,
                                          (char **)dataOutName,
                                          numUsedNode, //numOutDataPoint,
                                          dataOutMatrix,
                                          dataOutFormat,
                                          numUsedConnectivity, //numOutDataConnect, // numConnectivity
                                          dataConnectMatrix, // connectivity matrix
                                          NULL); // Solution time
            /*@+nullpass@*/
            AIM_STATUS(aimInfo, status);
            AIM_FREE(filename);

          } // End eigenvector names
        } // End if found eigenvectors

        status = CAPS_SUCCESS;

        // Clean-up
    cleanup:

        if (status != CAPS_SUCCESS &&
            status != CAPS_NOTFOUND) printf("Error: Premature exit in fun3d_dataTransfer status = %d\n", status);

        if (dataOutMatrix != NULL) {
          for (i = 0; i < numOutVariable; i++) {
            AIM_FREE(dataOutMatrix[i]);
          }
        }

        AIM_FREE(faces);
        AIM_FREE(dataOutMatrix);
        AIM_FREE(dataConnectMatrix);

        AIM_FREE(filename);
        AIM_FREE(boundName);
        AIM_FREE(usedNode);

        return status;
    }


    // Write FUN3D fun3d.nml file
    int fun3d_writeNML(void *aimInfo, capsValue *aimInputs, cfdBoundaryConditionStruct bcProps)
    {

        int status; // Function return status

        int i; // Indexing

        FILE *fnml = NULL;
        char filename[PATH_MAX];
        char fileExt[] ="fun3d.nml";

        printf("Writing fun3d.nml\n");
        if (aimInputs[Design_Functional-1].nullVal == NotNull ||
            aimInputs[Design_SensFile-1].vals.integer == (int)true) {
    #ifdef WIN32
            snprintf(filename, PATH_MAX, "Flow\\%s", fileExt);
    #else
            snprintf(filename, PATH_MAX, "Flow/%s", fileExt);
    #endif
        } else {
            strcpy(filename, fileExt);
        }

        fnml = aim_fopen(aimInfo, filename, "w");
        if (fnml == NULL) {
            AIM_ERROR(aimInfo, "Unable to open file - %s\n", filename);
            status = CAPS_IOERR;
            goto cleanup;
        }

        // &project
        fprintf(fnml,"&project\n");
        fprintf(fnml," project_rootname = \"%s\"\n",
                aimInputs[Proj_Name-1].vals.string);
        fprintf(fnml,"/\n\n");

        // &raw_grid
        fprintf(fnml,"&raw_grid\n");
        //fprintf(fnml," grid_format = \"%s\"\n",
        //        aimInputs[Mesh_Format-1].vals.string);

    //    if (aimInputs[Mesh_ASCII_Flag-1].vals.integer == (int) true) {
    //        fprintf(fnml," data_format = \"ascii\"\n");
    //    } else fprintf(fnml," data_format = \"stream\"\n");

        fprintf(fnml," grid_format = \"AFLR3\"\n");
        fprintf(fnml," data_format = \"stream\"\n");

        if (aimInputs[Two_Dimensional-1].vals.integer == (int) true) {
            fprintf(fnml," twod_mode = .true.\n");
          //fprintf(fnml," ignore_euler_number = .true.\n");
        }

        fprintf(fnml,"/\n\n");

        // &reference_physical_properties
        fprintf(fnml,"&reference_physical_properties\n");

        if (aimInputs[Mach-1].nullVal != IsNull) {
            fprintf(fnml," mach_number = %f\n", aimInputs[Mach-1].vals.real);
        }

        if (aimInputs[Re-1].nullVal != IsNull) {
            fprintf(fnml," reynolds_number = %f\n", aimInputs[Re-1].vals.real);
        }

        if (aimInputs[Alpha-1].nullVal != IsNull) {
            fprintf(fnml," angle_of_attack = %f\n", aimInputs[Alpha-1].vals.real);
        }

        if (aimInputs[Beta-1].nullVal != IsNull) {
            fprintf(fnml," angle_of_yaw = %f\n", aimInputs[Beta-1].vals.real);
        }

        if (aimInputs[Reference_Temperature-1].nullVal != IsNull) {
                fprintf(fnml," temperature = %f\n", aimInputs[Reference_Temperature-1].vals.real);

                if (aimInputs[Reference_Temperature-1].units != NULL) {
                    fprintf(fnml," temperature_units = \'%s\'\n", aimInputs[Reference_Temperature-1].units);
                }
        }

        fprintf(fnml,"/\n\n");

        // &governing_equations
        fprintf(fnml,"&governing_equations\n");

        if (aimInputs[Viscoux-1].nullVal != IsNull) {
            fprintf(fnml," viscous_terms = \"%s\"\n", aimInputs[Viscoux-1].vals.string);
        }

        if (aimInputs[Equation_Type-1].nullVal != IsNull) {
            fprintf(fnml," eqn_type = \"%s\"\n", aimInputs[Equation_Type-1].vals.string);
        }

        fprintf(fnml,"/\n\n");

        // &nonlinear_solver_parameters
        fprintf(fnml,"&nonlinear_solver_parameters\n");

        if (aimInputs[Time_Accuracy-1].nullVal != IsNull) {
            fprintf(fnml," time_accuracy = \"%s\"\n",
                    aimInputs[Time_Accuracy-1].vals.string);
        }

        if (aimInputs[Time_Step-1].nullVal != IsNull) {
            fprintf(fnml," time_step_nondim = %f\n", aimInputs[Time_Step-1].vals.real);
        }

        if (aimInputs[Num_Subiter-1].nullVal != IsNull) {
            fprintf(fnml," subiterations = %d\n",
                    aimInputs[Num_Subiter-1].vals.integer);
        }

        if (aimInputs[Temporal_Error-1].nullVal != IsNull) {

            fprintf(fnml," temporal_err_control = .true.\n");
            fprintf(fnml," temporal_err_floor = %f\n",
                    aimInputs[Temporal_Error-1].vals.real);

        }

        if (aimInputs[CFL_Schedule-1].nullVal != IsNull) {
            fprintf(fnml," schedule_cfl = %f %f\n",
                    aimInputs[CFL_Schedule-1].vals.reals[0],
                    aimInputs[CFL_Schedule-1].vals.reals[1]);
        }

        if (aimInputs[CFL_Schedule_Iter-1].nullVal != IsNull) {
            fprintf(fnml," schedule_iteration = %d %d\n",
                    aimInputs[CFL_Schedule_Iter-1].vals.integers[0],
                    aimInputs[CFL_Schedule_Iter-1].vals.integers[1]);
        }

        fprintf(fnml,"/\n\n");

        // &code_run_control
        fprintf(fnml,"&code_run_control\n");

        if (aimInputs[Num_Iter-1].nullVal != IsNull) {
            fprintf(fnml," steps = %d\n", aimInputs[Num_Iter-1].vals.integer);
        }

        if (aimInputs[Restart_Read-1].nullVal != IsNull) {
            fprintf(fnml," restart_read = '%s'\n",
                    aimInputs[Restart_Read-1].vals.string);
        }


        fprintf(fnml,"/\n\n");

        //&force_moment_integ_properties
        fprintf(fnml,"&force_moment_integ_properties\n");

        if (aimInputs[Reference_Area-1].nullVal != IsNull) {
            fprintf(fnml," area_reference = %f\n",
                    aimInputs[Reference_Area-1].vals.real);
        }

        if (aimInputs[Moment_Length-1].nullVal != IsNull) {
            fprintf(fnml," x_moment_length = %f\n",
                    aimInputs[Moment_Length-1].vals.reals[0]);

            fprintf(fnml," y_moment_length = %f\n",
                    aimInputs[Moment_Length-1].vals.reals[1]);
        }

        if (aimInputs[Moment_Center-1].nullVal != IsNull) {
            fprintf(fnml," x_moment_center = %f\n",
                    aimInputs[Moment_Center-1].vals.reals[0]);

            fprintf(fnml," y_moment_center = %f\n",
                    aimInputs[Moment_Center-1].vals.reals[1]);

            fprintf(fnml," z_moment_center = %f\n",
                    aimInputs[Moment_Center-1].vals.reals[2]);
        }

        fprintf(fnml,"/\n\n");

        //&boundary_conditions
        fprintf(fnml,"&boundary_conditions\n");

        // Loop through boundary conditions
        for (i = 0; i < bcProps.numSurfaceProp ; i++) {

            // Temperature
            if (bcProps.surfaceProp[i].wallTemperatureFlag == (int) true) {
                fprintf(fnml," wall_temperature(%d) = %f\n",bcProps.surfaceProp[i].bcID,
                        bcProps.surfaceProp[i].wallTemperature);
                fprintf(fnml," wall_temp_flag(%d) = .true.\n",bcProps.surfaceProp[i].bcID);
            }

            // Total pressure and temperature
            if (bcProps.surfaceProp[i].surfaceType == SubsonicInflow) {

                fprintf(fnml, " total_pressure_ratio(%d) = %f\n", bcProps.surfaceProp[i].bcID,
                        bcProps.surfaceProp[i].totalPressure);

                fprintf(fnml, " total_temperature_ratio(%d) = %f\n", bcProps.surfaceProp[i].bcID,
                        bcProps.surfaceProp[i].totalTemperature);
            }

            // Static pressure
            if (bcProps.surfaceProp[i].surfaceType == BackPressure ||
                    bcProps.surfaceProp[i].surfaceType == SubsonicOutflow) {

                fprintf(fnml, " static_pressure_ratio(%d) = %f\n", bcProps.surfaceProp[i].bcID,
                        bcProps.surfaceProp[i].staticPressure);
            }

            // Mach number
            if (bcProps.surfaceProp[i].surfaceType == MachOutflow ||
                    bcProps.surfaceProp[i].surfaceType == MassflowOut) {

                fprintf(fnml, " mach_bc(%d) = %f\n", bcProps.surfaceProp[i].bcID,
                        bcProps.surfaceProp[i].machNumber);
            }

            // Massflow
            if (bcProps.surfaceProp[i].surfaceType == MassflowIn ||
                    bcProps.surfaceProp[i].surfaceType == MassflowOut) {

                fprintf(fnml, " massflow(%d) = %f\n", bcProps.surfaceProp[i].bcID,
                        bcProps.surfaceProp[i].massflow);
            }

            // Fixed inflow and outflow
            /*if (bcProps.surfaceProp[i].surfaceType == FixedInflow ||
                bcProps.surfaceProp[i].surfaceType == FixedOutflow) {

                fprintf(fnml, " qset(%d,1) = %f\n", bcProps.surfaceProp[i].bcID,
                                                    bcProps.surfaceProp[i].staticDensity);

                fprintf(fnml, " qset(%d,2) = %f\n", bcProps.surfaceProp[i].bcID,
                                                    bcProps.surfaceProp[i].uVelocity);

                fprintf(fnml, " qset(%d,3) = %f\n", bcProps.surfaceProp[i].bcID,
                                                    bcProps.surfaceProp[i].vVelocity);

                fprintf(fnml, " qset(%d,4) = %f\n", bcProps.surfaceProp[i].bcID,
                                                    bcProps.surfaceProp[i].wVelocity);

                fprintf(fnml, " qset(%d,5) = %f\n", bcProps.surfaceProp[i].bcID,
                                                    bcProps.surfaceProp[i].staticDensity);
            }*/
        }

        fprintf(fnml,"/\n\n");

        // &noninertial_reference_frame
        fprintf(fnml,"&noninertial_reference_frame\n");


        if (aimInputs[NonInertial_Rotation_Rate-1].nullVal   != IsNull ||
            aimInputs[NonInertial_Rotation_Center-1].nullVal != IsNull) {

            fprintf(fnml," noninertial = .true.\n");
        }

        if (aimInputs[NonInertial_Rotation_Center-1].nullVal != IsNull) {
            fprintf(fnml," rotation_center_x = %f\n",
                    aimInputs[NonInertial_Rotation_Center-1].vals.reals[0]);
            fprintf(fnml," rotation_center_y = %f\n",
                    aimInputs[NonInertial_Rotation_Center-1].vals.reals[1]);
            fprintf(fnml," rotation_center_z = %f\n",
                    aimInputs[NonInertial_Rotation_Center-1].vals.reals[2]);
        }

        if (aimInputs[NonInertial_Rotation_Rate-1].nullVal != IsNull) {
            fprintf(fnml," rotation_rate_x = %f\n",
                    aimInputs[NonInertial_Rotation_Rate-1].vals.reals[0]);
            fprintf(fnml," rotation_rate_y = %f\n",
                    aimInputs[NonInertial_Rotation_Rate-1].vals.reals[1]);
            fprintf(fnml," rotation_rate_z = %f\n",
                    aimInputs[NonInertial_Rotation_Rate-1].vals.reals[2]);

        }

        fprintf(fnml,"/\n\n");

        status = CAPS_SUCCESS;

    cleanup:

        if (status != CAPS_SUCCESS)
            printf("Error: Premature exit in fun3d_writeNML status = %d\n", status);

        if (fnml != NULL) fclose(fnml);

        return status;
    }


    // Write FUN3D movingbody.input file
    int fun3d_writeMovingBody(void *aimInfo, double fun3dVersion, cfdBoundaryConditionStruct bcProps,
                              cfdModalAeroelasticStruct *modalAeroelastic)
    {

        int status; // Function return status

        int i, eigenIndex; // Indexing
        int counter = 0;
        FILE *fp = NULL;
        char *filename = NULL;
        char fileExt[] ="moving_body.input";

        int bodyIndex = 1;
        int stringLength;

        printf("Writing moving_body.input");

        stringLength = strlen(fileExt) + 1;

        AIM_ALLOC(filename,stringLength +1, char, aimInfo, status);

        strcpy(filename, fileExt);
        filename[stringLength] = '\0';

        fp = aim_fopen(aimInfo, filename, "w");
        if (fp == NULL) {
            AIM_ERROR(aimInfo, "Unable to open file - %s\n", filename);
            status = CAPS_IOERR;
            goto cleanup;
        }

        // &body_definitions
        fprintf(fp,"&body_definitions\n");

        fprintf(fp," n_moving_bodies = %d\n", bodyIndex);

        counter = 0;
        for (i = 0; i < bcProps.numSurfaceProp; i++) {

            if (bcProps.surfaceProp[i].surfaceType == Viscous ||
                    bcProps.surfaceProp[i].surfaceType == Inviscid) {

                fprintf(fp," defining_bndry(%d,%d) = %d\n", counter+1,
                        bodyIndex,
                        bcProps.surfaceProp[i].bcID);

                counter += 1;
            }
        }

        fprintf(fp," n_defining_bndry(%d) = %d\n", bodyIndex, counter);

        fprintf(fp," motion_driver(%d) = ", bodyIndex);
        if (modalAeroelastic != NULL) {
            fprintf(fp,"\"aeroelastic\"\n");
        }

        fprintf(fp," mesh_movement(%d) = ", bodyIndex);
        if (modalAeroelastic != NULL) {
            fprintf(fp,"\"deform\"\n");
        }

        fprintf(fp,"/\n\n");

        if (modalAeroelastic != NULL) {

            // &aeroelastic_modal_data
            fprintf(fp,"&aeroelastic_modal_data\n");

            fprintf(fp," nmode(%d) = %d\n", bodyIndex, modalAeroelastic->numEigenValue);

            if (fun3dVersion < 13.1) {
                fprintf(fp," uinf(%d) = %f\n", bodyIndex, modalAeroelastic->freestreamVelocity);
                fprintf(fp," qinf(%d) = %f\n", bodyIndex, modalAeroelastic->freestreamDynamicPressure);
                fprintf(fp," grefl(%d) = %f\n", bodyIndex, modalAeroelastic->lengthScaling);
            } else {
                fprintf(fp," uinf = %f\n", modalAeroelastic->freestreamVelocity);
                fprintf(fp," qinf = %f\n", modalAeroelastic->freestreamDynamicPressure);
                fprintf(fp," grefl = %f\n",modalAeroelastic->lengthScaling);
            }

            fprintf(fp, "\n");


            for (i = 0; i < modalAeroelastic->numEigenValue; i++) {

                eigenIndex = i + 1; // Change mode number so that it always starts at 1
                // modalAeroelastic->eigenValue[i].modeNumber

                fprintf(fp, " ! Mode %d of %d (structural mode %d)\n", eigenIndex,
                        modalAeroelastic->numEigenValue,
                        modalAeroelastic->eigenValue[i].modeNumber);

                fprintf(fp," freq(%d,%d) = %f\n", eigenIndex, bodyIndex, modalAeroelastic->eigenValue[i].frequency);
                fprintf(fp," damp(%d,%d) = %f\n", eigenIndex, bodyIndex, modalAeroelastic->eigenValue[i].damping);

                fprintf(fp," gmass(%d,%d) = %f\n"  , eigenIndex, bodyIndex, modalAeroelastic->eigenValue[i].generalMass);
                fprintf(fp," gdisp0(%d,%d) = %f\n" , eigenIndex, bodyIndex, modalAeroelastic->eigenValue[i].generalDisplacement);
                fprintf(fp," gvel0(%d,%d) = %f\n"  , eigenIndex, bodyIndex, modalAeroelastic->eigenValue[i].generalVelocity);
                fprintf(fp," gforce0(%d,%d) = %f\n", eigenIndex, bodyIndex, modalAeroelastic->eigenValue[i].generalForce);

                fprintf(fp, "\n");
            }
            fprintf(fp,"/\n\n");
        }

        status = CAPS_SUCCESS;

    cleanup:
        if (status != CAPS_SUCCESS)
            printf("Error: Premature exit in fun3d_writeMovingBody status = %d\n",
                   status);

        if (fp != NULL) fclose(fp);

        if (filename != NULL) EG_free(filename);

        return status;
    }


    // Write FUN3D parameterization/sensitivity file
    // Will not calculate shape sensitivities if there are no geometry design variable; will
    // simple check and dump out the body meshes in model.tec files
    int  fun3d_writeParameterization(void *aimInfo,
                                     int numDesignVariable,
                                     cfdDesignVariableStruct designVariable[],
                                     aimMeshRef *meshRef)
    {

        int status; // Function return status

        int i, j, k, m, row, col; // Indexing

        int stringLength = 7;

        // Data transfer Out variables
        char **dataOutName= NULL;

        double ***dataOutMatrix = NULL;
        int *dataOutFormat = NULL;
        int *dataConnectMatrix = NULL;

        int numOutVariable = 4; // x, y, z, id, ... + 3* active GeomIn
        int numOutDataPoint = 0;
        int numOutDataConnect = 0;

        // Variables used in global node mapping
        int ptype, pindex;
        double xyz[3];

        const char *geomInName;
        int numPoint;
        double *dxyz = NULL;

        int index;
        int iface, iglobal;
        int state, nFace;
        ego body, *faces=NULL;

        int alen, ntri, atype, itri, ielem;
        const double *face_xyz, *face_uv, *reals;
        const int *face_ptype, *face_pindex, *face_tris, *face_tric, *nquad=NULL;
        const char *string;

        char message[100];
        char filePre[] = "model.tec.";
        char fileExt[] = ".sd1";
        char *filename = NULL;
        char folder[]  = "Rubberize";
        char zoneTitle[100];

        capsValue *geomInVal;
        int *geomSelect = NULL;

        AIM_ALLOC(geomSelect, numDesignVariable, int, aimInfo, status);

        // Determine number of geometry input variables

        for (i = 0; i < numDesignVariable; i++) {
            geomSelect[i] = (int) false;

            printf("DesignVariable = %s\n", designVariable[i].name);

            index = aim_getIndex(aimInfo, designVariable[i].name, GEOMETRYIN);
            if (index == CAPS_NOTFOUND) continue;
            if (index < CAPS_SUCCESS ) {
              status = index;
              AIM_STATUS(aimInfo, status);
            }

            if(aim_getGeomInType(aimInfo, index) != 0) {
                AIM_ERROR(aimInfo, "GeometryIn value %s is a configuration parameter and not a valid design parameter - can't get sensitivity\n",
                          designVariable[i].name);
                status = CAPS_BADVALUE;
                goto cleanup;
            }


            status = aim_getValue(aimInfo, index, GEOMETRYIN, &geomInVal);
            AIM_STATUS(aimInfo, status);

            numOutVariable += 3*geomInVal->length; // xD1, yD1, zD1, ...

            // Don't compute sensitivities if not needed
            geomSelect[i] = (int) true;
        }

        // No need to write Rubberize files without GeometryIn design variables
        if (numOutVariable == 4) {
            status = CAPS_SUCCESS;
            goto cleanup;
        }

        if (numOutVariable > 99999999) {
            AIM_ERROR(aimInfo, "Array of design variable names will be over-run!");
            status = CAPS_RANGEERR;
            goto cleanup;
        }

        // Allocate our names
        AIM_ALLOC(dataOutName, numOutVariable, char*, aimInfo, status);
        for (i = 0; i < numOutVariable; i++) dataOutName[i] = NULL;

        stringLength = 11;
        j = 1;
        k = 1;
        for (i = 0; i < numOutVariable; i++) {
            AIM_ALLOC(dataOutName[i], stringLength+1, char, aimInfo, status);

            // Set names
            if      (i == 0) sprintf(dataOutName[i], "%s", "x");
            else if (i == 1) sprintf(dataOutName[i], "%s", "y");
            else if (i == 2) sprintf(dataOutName[i], "%s", "z");
            else if (i == 3) sprintf(dataOutName[i], "%s", "id");
            else {

                if      (j == 1) sprintf(dataOutName[i], "%s%d", "xD", k);
                else if (j == 2) sprintf(dataOutName[i], "%s%d", "yD", k);
                else if (j == 3) {
                    sprintf(dataOutName[i], "%s%d", "zD", k);
                    j = 0;
                    k += 1;
                }
                j += 1;
            }
        }

        AIM_ALLOC(dataOutFormat, numOutVariable, int, aimInfo, status);

        // Set data out formatting
        for (i = 0; i < numOutVariable; i++) {
            if (strcasecmp(dataOutName[i], "id") == 0) {
                dataOutFormat[i] = (int) Integer;
            } else {
                dataOutFormat[i] = (int) Double;
            }
        }

        // Allocate data arrays that are going to be output
        AIM_ALLOC(dataOutMatrix, meshRef->nmap, double**, aimInfo, status);
        for (i = 0; i < meshRef->nmap; i++) dataOutMatrix[i] = NULL;

        for (i = 0; i < meshRef->nmap; i++) {
          AIM_ALLOC(dataOutMatrix[i], numOutVariable, double*, aimInfo, status);
          for (j = 0; j < numOutVariable; j++) dataOutMatrix[i][j] = NULL;
        }

        for (i = 0; i < meshRef->nmap; i++) {
          if (meshRef->maps[i].tess == NULL) continue;

          status = EG_statusTessBody(meshRef->maps[i].tess, &body, &state, &numOutDataPoint);
          AIM_STATUS(aimInfo, status);

          // allocate data arrays
          for (j = 0; j < numOutVariable; j++) {
            AIM_ALLOC(dataOutMatrix[i][j], numOutDataPoint, double, aimInfo, status);
          }

          for (iglobal = 0; iglobal < numOutDataPoint; iglobal++) {
            status = EG_getGlobal(meshRef->maps[i].tess,
                                  iglobal+1, &ptype, &pindex, xyz);
            AIM_STATUS(aimInfo, status);

            // First just set the Coordinates
            dataOutMatrix[i][0][iglobal] = xyz[0];
            dataOutMatrix[i][1][iglobal] = xyz[1];
            dataOutMatrix[i][2][iglobal] = xyz[2];

            // Volume mesh node ID
            dataOutMatrix[i][3][iglobal] = meshRef->maps[i].map[iglobal];
          }
        }

        // Loop over the geometry in values and compute sensitivities for all bodies
        m = 4;
        for (j = 0; j < numDesignVariable; j++) {

          if (geomSelect[j] == (int) false) continue;

          geomInName = designVariable[j].name;
          index = aim_getIndex(aimInfo, geomInName, GEOMETRYIN);

          status = aim_getValue(aimInfo, index, GEOMETRYIN, &geomInVal);
          AIM_STATUS(aimInfo, status);

          for (row = 0; row < geomInVal->nrow; row++) {
            for (col = 0; col < geomInVal->ncol; col++) {

              for (i = 0; i < meshRef->nmap; i++) {
                if (meshRef->maps[i].tess == NULL) continue;
                status = aim_tessSensitivity(aimInfo,
                                             geomInName,
                                             row+1, col+1, // row, col
                                             meshRef->maps[i].tess,
                                             &numPoint, &dxyz);
                AIM_STATUS(aimInfo, status, "Sensitivity for: %s\n", geomInName);
                AIM_NOTNULL(dxyz, aimInfo, status);

                for (k = 0; k < numPoint; k++) {
                  dataOutMatrix[i][m+0][k] = dxyz[3*k + 0]; // dx/dGeomIn
                  dataOutMatrix[i][m+1][k] = dxyz[3*k + 1]; // dy/dGeomIn
                  dataOutMatrix[i][m+2][k] = dxyz[3*k + 2]; // dz/dGeomIn
                }
                AIM_FREE(dxyz);
              }
              m += 3;
            }
          }
        }

        // Write sensitivity files for each body tessellation

        for (i = 0; i < meshRef->nmap; i++) {
          if (meshRef->maps[i].tess == NULL) continue;
          status = EG_statusTessBody(meshRef->maps[i].tess, &body, &state, &numOutDataPoint);
          AIM_STATUS(aimInfo, status);

          // check if the tessellation has a mixture of quad and tess
          status = EG_attributeRet(meshRef->maps[i].tess, ".mixed",
                                   &atype, &alen, &nquad, &reals, &string);
          if (status != EGADS_SUCCESS &&
              status != EGADS_NOTFOUND) AIM_STATUS(aimInfo, status);

          status = EG_getBodyTopos(body, NULL, FACE, &nFace, &faces);
          AIM_STATUS(aimInfo, status);

          ielem = 0;
          numOutDataConnect = 0;
          for (iface = 0; iface < nFace; iface++) {
            // get the face tessellation
            status = EG_getTessFace(meshRef->maps[i].tess, iface+1, &alen, &face_xyz, &face_uv,
                                    &face_ptype, &face_pindex, &ntri, &face_tris, &face_tric);
            AIM_STATUS(aimInfo, status);

            if (nquad == NULL) { // all triangles

              // re-allocate data arrays
              AIM_REALL(dataConnectMatrix, 4*(numOutDataConnect + ntri), int, aimInfo, status);

              for (itri = 0; itri < ntri; itri++, ielem++) {
                for (j = 0; j < 3; j++) {
                  status = EG_localToGlobal(meshRef->maps[i].tess, iface+1, face_tris[3*itri+j], &iglobal);
                  AIM_STATUS(aimInfo, status);
                  dataConnectMatrix[4*ielem+j] = iglobal;
                }
                // repeat the last node for triangles
                dataConnectMatrix[4*ielem+3] = dataConnectMatrix[4*ielem+2];
              }

              numOutDataConnect += ntri;

            } else { // mixture of tri and quad elements

              // re-allocate data arrays
              AIM_REALL(dataConnectMatrix, 4*(numOutDataConnect + ntri-nquad[iface]), int, aimInfo, status);

              // process triangles
              for (itri = 0; itri < ntri-2*nquad[iface]; itri++, ielem++) {
                for (j = 0; j < 3; j++) {
                  status = EG_localToGlobal(meshRef->maps[i].tess, iface+1, face_tris[3*itri+j], &iglobal);
                  AIM_STATUS(aimInfo, status);
                  dataConnectMatrix[4*ielem+j] = iglobal;
                }
                // repeat the last node for triangle
                dataConnectMatrix[4*ielem+3] = dataConnectMatrix[4*ielem+2];
              }
              // process quads
              for (; itri < ntri; itri++, ielem++) {
                for (j = 0; j < 3; j++) {
                  status = EG_localToGlobal(meshRef->maps[i].tess, iface+1, face_tris[3*itri+j], &iglobal);
                  AIM_STATUS(aimInfo, status);
                  dataConnectMatrix[4*ielem+j] = iglobal;
                }

                // add the last node from the 2nd triangle to make the quad
                itri++;
                status = EG_localToGlobal(meshRef->maps[i].tess, iface+1, face_tris[3*itri+2], &iglobal);
                AIM_STATUS(aimInfo, status);
                dataConnectMatrix[4*ielem+3] = iglobal;
              }

              numOutDataConnect += ntri-nquad[iface];
            }

          }
          AIM_FREE(faces);

          sprintf(message,"%s %d,", "sensitivity file for body", i+1);

          stringLength = strlen(folder) + 1 + strlen(filePre) + 7 + strlen(fileExt) + 1 ;

          AIM_REALL(filename, stringLength, char, aimInfo, status);

    #ifdef WIN32
          sprintf(filename, "%s\\%s%d%s", folder, filePre, i+1, fileExt);
    #else
          sprintf(filename, "%s/%s%d%s",  folder, filePre, i+1, fileExt);
    #endif

          sprintf(zoneTitle, "%s_%d", "Body", i+1);
          /*@-nullpass@*/
          status = tecplot_writeFEPOINT(aimInfo,
                                        filename,
                                        message,
                                        zoneTitle,
                                        numOutVariable,
                                        dataOutName,
                                        numOutDataPoint,
                                        dataOutMatrix[i],
                                        dataOutFormat,
                                        numOutDataConnect,
                                        dataConnectMatrix,
                                        NULL);
          /*@+nullpass@*/
          AIM_STATUS(aimInfo, status);
        }

        status = CAPS_SUCCESS;

    cleanup:
        (void) string_freeArray(numOutVariable, &dataOutName);
    #ifdef S_SPLINT_S
        EG_free(dataOutName);
    #endif

        if (dataOutMatrix != NULL) {
            for (i = 0; i < meshRef->nmap; i++) {
              if (dataOutMatrix[i] != NULL) {
                  for (j = 0; j < numOutVariable; j++) {
                      AIM_FREE(dataOutMatrix[i][j]);
                  }
              }
              AIM_FREE(dataOutMatrix[i]);
            }
        }

        AIM_FREE(dataOutMatrix);
        AIM_FREE(dataOutFormat);
        AIM_FREE(dataConnectMatrix);
        AIM_FREE(faces);

        AIM_FREE(dxyz);
        AIM_FREE(filename);
        AIM_FREE(geomSelect);

        return status;
    }


    static int _writeFunctinoalComponent(void *aimInfo, FILE *fp, cfdDesignFunctionalCompStruct *comp)
    {
        int status = CAPS_SUCCESS;

        const char *names[] = {"cl", "cd",                   // Lift, drag coefficients
                               "clp", "cdp",                 // Lift, drag coefficients: pressure contributions
                               "clv", "cdv",                 // Lift, drag coefficients: shear contributions
                               "cmx", "cmy", "cmz",          // x/y/z-axis moment coefficients
                               "cmxp", "cmyp", "cmzp",       // x/y/z-axis moment coefficients: pressure contributions
                               "cmxv", "cmyv", "cmzv",       // x/y/z-axis moment coefficients: shear contributions
                               "cx", "cy", "cz",             // x/y/z-axis force coefficients
                               "cxp", "cyp", "czp",          // x/y/z-axis force coefficients: pressure contributions
                               "cxv", "cyv", "czv",          // x/y/z-axis force coefficients: shear contributions
                               "powerx", "powery", "powerz", // x/y/z-axis power coefficients
                               "clcd",                       // Lift-to-drag ratio
                               "fom"    ,                    // Rotorcraft figure of merit
                               "propeff",                    // Rotorcraft propulsive efficiency
                               "rtr"    ,                    // thrust Rotorcraft thrust function
                               "pstag"  ,                    // RMS of stagnation pressure in cutting plane disk
                               "distort",                    // Engine inflow distortion
                               "boom"   ,                    // targ Near-field p/p∞ pressure target
                               "sboom"  ,                    // Coupled sBOOM ground-based noise metrics
                               "ae"     ,                    // Supersonic equivalent area target distribution
                               "press"  ,                    // box RMS of pressure in user-defined box, also pointwise dp/dt, dρ/dt
                               "cpstar" ,                    // Target pressure distributions
                               "sgen"                        // Entropy generation
                              };

        int i, found = (int)false;
        char *function=NULL, *c=NULL;

        for (i = 0; i < sizeof(names)/sizeof(char*); i++)
            if ( strcasecmp(names[i], comp->name) == 0 ) {
                found = (int)true;
                break;
            }

        if (found == (int) false) {
            AIM_ERROR(aimInfo, "Unknown function: '%s'", comp->name);
            AIM_ADDLINE(aimInfo, "Available functions:");
            for (i = 0; i < sizeof(names)/sizeof(char*); i++)
                AIM_ADDLINE(aimInfo, "'%s'", names[i]);
            status = CAPS_BADVALUE;
            goto cleanup;
        }

        // make the name lower case
        AIM_STRDUP(function, comp->name, aimInfo, status);
        for (c = function; *c != '\0'; ++c) *c = tolower(*c);

        // fprintf(fp, "Components of function   1: boundary id (0=all)/name/value/weight/target/power\n");
        fprintf(fp, " %d %s          %f %f %f %f\n", comp->bcID,
                                                     function,
                                                     0.0,
                                                     comp->weight,
                                                     comp->target,
                                                     comp->power);

        status = CAPS_SUCCESS;

    cleanup:
        AIM_FREE(function);
        return status;
    }


    // Write FUN3D  rubber.data file
    // Will not write shape entries unless explicitly told to check if they are need
    int fun3d_writeRubber(void *aimInfo,
                          cfdDesignStruct design,
                          int checkGeomShape,
                          double fun3dVersion,
                          aimMeshRef *meshRef)
    {
        int status; // Function return status

        int i, j, k, m; // Indexing

        int numBody = 0, numShapeVar = 0;

        char file[] = "rubber.data";
        FILE *fp = NULL;

        printf("Writing %s \n", file);
        if (meshRef == NULL) return CAPS_NULLVALUE;

        // Open file
        fp = aim_fopen(aimInfo, file, "w");
        if (fp == NULL) {
            AIM_ERROR(aimInfo, "Unable to open file: %s\n", file);
            status = CAPS_IOERR;
            goto cleanup;
        }

        numBody = meshRef->nmap;

        if (checkGeomShape == (int) true) {
            // Determine number of geometry input variables
            for (i = 0; i < design.numDesignVariable; i++) {

                if (design.designVariable[i].type != DesignVariableGeometry) continue;

                numShapeVar += design.designVariable[i].var->length; // xD1, yD1, zD1, ...
            }
        }

        // Don't write out body information if there are no geometry design variables
        if (numShapeVar == 0) numBody = 0;


        fprintf(fp, "################################################################################\n");
        fprintf(fp, "########################### Design Variable Information ########################\n");
        fprintf(fp, "################################################################################\n");
        fprintf(fp, "Global design variables (Mach number, AOA, Yaw, Noninertial rates)\n");
        fprintf(fp, "Var Active         Value               Lower Bound            Upper Bound\n");

        for (i = 0; i < design.numDesignVariable; i++) {

            if (strcasecmp(design.designVariable[i].name, "Mach") != 0) continue;

            if (design.designVariable[i].var->length < 1) {
                status = CAPS_RANGEERR;
                goto cleanup;
            }

            fprintf(fp, "Mach    1   %.15E  %.15E  %.15E\n", design.designVariable[i].value[0],
                                                             design.designVariable[i].lowerBound[0],
                                                             design.designVariable[i].upperBound[0]);
            break;
        }

        if (i >= design.numDesignVariable) fprintf(fp, "Mach    0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");

        for (i = 0; i < design.numDesignVariable; i++) {

            if (strcasecmp(design.designVariable[i].name, "Alpha") != 0) continue;

            if (design.designVariable[i].var->length < 1) {
                status = CAPS_RANGEERR;
                goto cleanup;
            }

            fprintf(fp, "AOA     1   %.15E  %.15E  %.15E\n", design.designVariable[i].value[0],
                                                             design.designVariable[i].lowerBound[0],
                                                             design.designVariable[i].upperBound[0]);
            break;
        }

        if (i >= design.numDesignVariable) fprintf(fp, "AOA     0   0.000000000000000E+00  0.000000000000000E+00  0.00000000000000E+00\n");


        if (fun3dVersion > 12.4) {
            // FUN3D version 13.1 - version 12.4 doesn't have these available

            for (i = 0; i < design.numDesignVariable; i++) {

                if (strcasecmp(design.designVariable[i].name, "Beta") != 0) continue;

                if (design.designVariable[i].var->length < 1) {
                    status = CAPS_RANGEERR;
                    goto cleanup;
                }

                fprintf(fp, "Yaw     1   %.15E  %.15E  %.15E\n", design.designVariable[i].value[0],
                                                                 design.designVariable[i].lowerBound[0],
                                                                 design.designVariable[i].upperBound[0]);
                break;
            }

            if (i >= design.numDesignVariable) fprintf(fp, "Yaw     0   0.000000000000000E+00  0.000000000000000E+00  0.00000000000000E+00\n");

            for (i = 0; i < design.numDesignVariable; i++) {

                if (strcasecmp(design.designVariable[i].name, "NonInertial_Rotation_Rate") != 0) continue;

                if (design.designVariable[i].var->length < 3) {
                    status = CAPS_RANGEERR;
                    goto cleanup;
                }

                fprintf(fp, "xrate   1   %.15E  %.15E  %.15E\n", design.designVariable[i].value[0],
                                                                 design.designVariable[i].lowerBound[0],
                                                                 design.designVariable[i].upperBound[0]);
                break;
            }

            if (i >= design.numDesignVariable) fprintf(fp, "xrate   0   0.000000000000000E+00  0.000000000000000E+00  0.00000000000000E+00\n");

            for (i = 0; i < design.numDesignVariable; i++) {

                if (strcasecmp(design.designVariable[i].name, "NonInertial_Rotation_Rate") != 0) continue;

                if (design.designVariable[i].var->length < 3) {
                    status = CAPS_RANGEERR;
                    goto cleanup;
                }

                fprintf(fp, "yrate   1   %.15E  %.15E  %.15E\n", design.designVariable[i].value[1],
                                                                 design.designVariable[i].lowerBound[1],
                                                                 design.designVariable[i].upperBound[1]);
                break;
            }

            if (i >= design.numDesignVariable) fprintf(fp, "yrate   0   0.000000000000000E+00  0.000000000000000E+00  0.00000000000000E+00\n");

            for (i = 0; i < design.numDesignVariable; i++) {

                if (strcasecmp(design.designVariable[i].name, "NonInertial_Rotation_Rate") != 0) continue;

                if (design.designVariable[i].var->length < 3) {
                    status = CAPS_RANGEERR;
                    goto cleanup;
                }

                fprintf(fp, "zrate   1   %.15E  %.15E  %.15E\n", design.designVariable[i].value[2],
                                                                 design.designVariable[i].lowerBound[2],
                                                                 design.designVariable[i].upperBound[2]);
                break;
            }

            if (i >= design.numDesignVariable) fprintf(fp, "zrate   0   0.000000000000000E+00  0.000000000000000E+00  0.00000000000000E+00\n");
        }

        fprintf(fp, "Number of bodies\n");
        fprintf(fp, "%d\n", numBody);
        for (i = 0; i < numBody; i++) {
            fprintf(fp, "Rigid motion design variables for 'Body %d'\n", i+1);
            fprintf(fp, "Var Active         Value               Lower Bound            Upper Bound\n");
            fprintf(fp, "RotRate  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            fprintf(fp, "RotFreq  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            fprintf(fp, "RotAmpl  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            fprintf(fp, "RotOrgx  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            fprintf(fp, "RotOrgy  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            fprintf(fp, "RotOrgz  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            fprintf(fp, "RotVecx  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            fprintf(fp, "RotVecy  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            fprintf(fp, "RotVecz  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            fprintf(fp, "TrnRate  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            fprintf(fp, "TrnFreq  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            fprintf(fp, "TrnAmpl  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            fprintf(fp, "TrnVecx  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            fprintf(fp, "TrnVecy  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            fprintf(fp, "TrnVecz  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00\n");
            if (fun3dVersion > 12.4) {
                // FUN3D version 13.1 - version 12.4 doesn't have option 5
                fprintf(fp, "Parameterization Scheme (Massoud=1 Bandaids=2 Sculptor=4 User-Defined=5)\n");
                fprintf(fp, "5\n");
            } else {

                fprintf(fp, "Parameterization Scheme (Massoud=1 Bandaids=2 Sculptor=4)\n");
                fprintf(fp, "1\n");
            }

            fprintf(fp, "Number of shape variables for 'Body %d'\n", i+1);
            fprintf(fp, "%d\n", numShapeVar);
            fprintf(fp, "Index Active         Value               Lower Bound            Upper Bound\n");

            m = 1;
            for (j = 0; j < design.numDesignVariable; j++) {

                if (design.designVariable[j].type != DesignVariableGeometry) continue;

                for (k = 0; k < design.designVariable[j].var->length; k++ ) {

                    fprintf(fp, "%d    1   %.15E  %.15E  %.15E\n", m, design.designVariable[j].value[k],
                                                                      design.designVariable[j].lowerBound[k],
                                                                      design.designVariable[j].upperBound[k]);

                    m += 1;
                }
            }
        }

        fprintf(fp, "################################################################################\n");
        fprintf(fp, "############################### Function Information ###########################\n");
        fprintf(fp, "################################################################################\n");
        fprintf(fp, "Number of composite functions for design problem statement\n");
        fprintf(fp, "%d\n", design.numDesignFunctional);

        for (i = 0; i < design.numDesignFunctional; i++) {
            fprintf(fp, "################################################################################\n");
            fprintf(fp, "Cost function (1) or constraint (2)\n");
            fprintf(fp, "1\n");
            fprintf(fp, "If constraint, lower and upper bounds\n");
            fprintf(fp, "0.0 0.0\n");
            fprintf(fp, "Number of components for function   %d\n", i+1);
            fprintf(fp, "%d\n", design.designFunctional[i].numComponent);
            fprintf(fp, "Physical timestep interval where function is defined\n");
            fprintf(fp, "1 1\n");
            fprintf(fp, "Composite function weight, target, and power\n");
            fprintf(fp, "1.0 0.0 1.0\n");
            fprintf(fp, "Components of function   %d: boundary id (0=all)/name/value/weight/target/power\n", i+1);

            for (j = 0; j < design.designFunctional[i].numComponent; j++) {
                //fprintf(fp, "0 clcd          0.000000000000000    1.000   10.00000 2.000\n");
                status = _writeFunctinoalComponent(aimInfo, fp, &design.designFunctional[i].component[j]);
                if (status != CAPS_SUCCESS) goto cleanup;
            }

            fprintf(fp, "Current value of function   %d\n", i+1);
            fprintf(fp, "0.000000000000000\n");
            fprintf(fp, "Current derivatives of function wrt global design variables\n");
            fprintf(fp, "0.000000000000000\n");
            fprintf(fp, "0.000000000000000\n");

            if (fun3dVersion > 12.4) {
                // FUN3D version 13.1 - version 12.4 doesn't have these available
                fprintf(fp, "0.000000000000000\n"); // Yaw
                fprintf(fp, "0.000000000000000\n"); // xrate
                fprintf(fp, "0.000000000000000\n"); // yrate
                fprintf(fp, "0.000000000000000\n"); // zrate
            }

            for (j = 0; j < numBody; j++) {
                fprintf(fp, "Current derivatives of function wrt rigid motion design variables of body %d\n", j+1);
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "0.000000000000000\n");
                fprintf(fp, "Current derivatives of function wrt shape design variables of body %d\n", j+1);

                for (k = 0; k < design.numDesignVariable; k++) {

                    if (design.designVariable[k].type != DesignVariableGeometry) continue;

                    for (m = 0; m < design.designVariable[k].var->length; m++ ) fprintf(fp, "0.000000000000000\n");
                }
            }
        }

        status = CAPS_SUCCESS;

    cleanup:
        if (status != CAPS_SUCCESS)
            printf("Error: Premature exit in fun3d_writeRubber status = %d\n",
                   status);

        if (fp != NULL) fclose(fp);

        return status;

        /* Version 13.1 - template
    ################################################################################
    ########################### Design Variable Information ########################
    ################################################################################
    Global design variables (Mach number, AOA, Yaw, Noninertial rates)
    Var Active         Value               Lower Bound            Upper Bound
    Mach    0   0.800000000000000E+00  0.000000000000000E+00  0.900000000000000E+00
      AOA    1   1.000000000000000E+00  0.000000000000000E+00  5.000000000000000E+00
      Yaw    0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    xrate    0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    yrate    0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    zrate    0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    Number of bodies
    2
    Rigid motion design variables for 'wing'
    Var Active         Value               Lower Bound            Upper Bound
    RotRate  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotFreq  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotAmpl  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotOrgx  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotOrgy  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotOrgz  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotVecx  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotVecy  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotVecz  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    TrnRate  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    TrnFreq  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    TrnAmpl  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    TrnVecx  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    TrnVecy  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    TrnVecz  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    Parameterization Scheme (Massoud=1 Bandaids=2 Sculptor=4 User-Defined=5)
    1
    Number of shape variables for 'wing'
    3
    Index Active         Value               Lower Bound            Upper Bound
    1    1   1.000000000000000E+00  0.000000000000000E+00  2.000000000000000E+00
    2    1   1.000000000000000E+00  0.000000000000000E+00  2.000000000000000E+00
    3    1   1.000000000000000E+00  0.000000000000000E+00  2.000000000000000E+00
    Rigid motion design variables for 'tail'
    Var Active         Value               Lower Bound            Upper Bound
    RotRate  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotFreq  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotAmpl  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotOrgx  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotOrgy  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotOrgz  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotVecx  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotVecy  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    RotVecz  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    TrnRate  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    TrnFreq  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    TrnAmpl  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    TrnVecx  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    TrnVecy  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    TrnVecz  0   0.000000000000000E+00  0.000000000000000E+00  0.000000000000000E+00
    Parameterization Scheme (Massoud=1 Bandaids=2 Sculptor=4 User-Defined=5)
    2
    Number of shape variables for 'tail'
    2
    Index Active         Value               Lower Bound            Upper Bound
    1    1   2.000000000000000E+00 -1.000000000000000E+00  5.000000000000000E+00
    2    1   2.000000000000000E+00 -1.000000000000000E+00  5.000000000000000E+00
    ################################################################################
    ############################### Function Information ###########################
    ################################################################################
    Number of composite functions for design problem statement
    2
    ################################################################################
    Cost function (1) or constraint (2)
    1
    If constraint, lower and upper bounds
    0.0 0.0
    Number of components for function   1
    1
    Physical timestep interval where function is defined
    1 1
    Composite function weight, target, and power
    1.0 0.0 1.0
    Components of function   1: boundary id (0=all)/name/value/weight/target/power
    0 cl            0.000000000000000    1.000   10.00000 2.000
    Current value of function   1
    0.000000000000000
    Current derivatives of function wrt global design variables
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    Current derivatives of function wrt rigid motion design variables of body   1
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    Current derivatives of function wrt shape design variables of body   1
    0.000000000000000
    0.000000000000000
    0.000000000000000
    Current derivatives of function wrt rigid motion design variables of body   2
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    Current derivatives of function wrt shape design variables of body   2
    0.000000000000000
    0.000000000000000
    ################################################################################
    Cost function (1) or constraint (2)
    2
    If constraint, lower and upper bounds
    -0.03 -0.01
    Number of components for function   2
    1
    Physical timestep interval where function is defined
    1 1
    Composite function weight, target, and power
    1.0 0.0 1.0
    Components of function   2: boundary id (0=all)/name/value/weight/target/power
    0 cmy           0.000000000000000    1.000    0.00000 1.000
    Current value of function   2
    0.000000000000000
    Current derivatives of function wrt global design variables
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    Current derivatives of function wrt rigid motion design variables of body   1
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    Current derivatives of function wrt shape design variables of body   1
    0.000000000000000
    0.000000000000000
    0.000000000000000
    Current derivatives of function wrt rigid motion design variables of body   2
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    0.000000000000000
    Current derivatives of function wrt shape design variables of body   2
    0.000000000000000
    0.000000000000000
         */
    }

    // Finds a line in rubber.data that matches header
    static int findHeader(const char *header, char **line, size_t *nline, int *iline, FILE *fp)
    {
        int i;
        while (getline(line, nline, fp) != -1) {
            (*iline)++;
            if (nline == 0) continue;
            if ((*line)[0] == '#') continue;
            i = 0;
            while ((*line)[i] == ' ' && (*line)[i] != '\0') i++;
            if (strncasecmp(header, &(*line)[i], strlen(header)) == 0)
              break;
        }
        if (feof(fp)) return CAPS_IOERR;

        return CAPS_SUCCESS;
    }


    // Read objective value and derivatives from FUN3D rubber.data file
    // Will not read shape entries unless explicitly told to check if they are needed
    int fun3d_readRubber(void *aimInfo,
                         cfdDesignStruct design,
                         int checkGeomShape,
                         double fun3dVersion,
                         aimMeshRef *meshRef)
    {
        int status; // Function return status

        int i, j, k, ibody; // Indexing

        int numShapeVar = 0;

        size_t nline;
        int iline=0;
        char *line=NULL;
        char file[] = "rubber.data";
        double dfun_dvar = 0;
        FILE *fp = NULL;

        int numBody;

        // Get AIM bodies
        numBody = meshRef->nmap;

        printf("Reading %s \n", file);

        // Open file
        fp = aim_fopen(aimInfo, file, "r");
        if (fp == NULL) {
            AIM_ERROR(aimInfo, "Unable to open file: %s\n", file);
            status = CAPS_IOERR;
            goto cleanup;
        }

        for (i = 0; i < design.numDesignFunctional; i++) {

            status = findHeader("Current value of function", &line, &nline, &iline, fp);
            AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);

            // Get the line with the objective value
            status = getline(&line, &nline, fp); iline++;
            if (status == -1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
            AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
            AIM_NOTNULL(line, aimInfo, status);

            status = sscanf(line, "%lf", &design.designFunctional[i].value);
            if (status != 1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
            AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);

            // skip: Current derivatives of function wrt rigid motion design variables of
            status = getline(&line, &nline, fp); iline++;
            if (status == -1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
            AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
            AIM_NOTNULL(line, aimInfo, status);

            // read the dFun/dMach
            status = getline(&line, &nline, fp); iline++;
            if (status == -1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
            AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
            AIM_NOTNULL(line, aimInfo, status);

            for (j = 0; j < design.designFunctional[i].numDesignVariable; j++) {

                if (strcasecmp(design.designFunctional[i].dvar[j].name, "Mach") != 0) continue;

                status = sscanf(line, "%lf", &design.designFunctional[i].dvar[j].value[0]);
                if (status != 1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
                AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
                break;
            }

            // read the dFun/dAOA
            status = getline(&line, &nline, fp); iline++;
            if (status == -1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
            AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
            AIM_NOTNULL(line, aimInfo, status);

            for (j = 0; j < design.numDesignVariable; j++) {

                if (strcasecmp(design.designFunctional[i].dvar[j].name, "Alpha") != 0) continue;

                status = sscanf(line, "%lf", &design.designFunctional[i].dvar[j].value[0]);
                if (status != 1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
                AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
                break;
            }

            if (fun3dVersion > 12.4) {
                // FUN3D version 13.1 - version 12.4 doesn't have these available

                // read the dFun/dBeta
                status = getline(&line, &nline, fp); iline++;
                if (status == -1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
                AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
                AIM_NOTNULL(line, aimInfo, status);

                for (j = 0; j < design.designFunctional[i].numDesignVariable; j++) {

                    if (strcasecmp(design.designFunctional[i].dvar[j].name, "Beta") != 0) continue;

                    status = sscanf(line, "%lf", &design.designFunctional[i].dvar[j].value[0]);
                    if (status != 1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
                    AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
                    break;
                }

                // read the dFun/dNonInertial_Rotation_Rate[0]
                status = getline(&line, &nline, fp); iline++;
                if (status == -1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
                AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
                AIM_NOTNULL(line, aimInfo, status);

                for (j = 0; j < design.designFunctional[i].numDesignVariable; j++) {

                    if (strcasecmp(design.designFunctional[i].dvar[j].name, "NonInertial_Rotation_Rate") != 0) continue;

                    status = sscanf(line, "%lf", &design.designFunctional[i].dvar[j].value[0]);
                    if (status != 1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
                    AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
                    break;
                }

                // read the dFun/dNonInertial_Rotation_Rate[1]
                status = getline(&line, &nline, fp); iline++;
                if (status == -1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
                AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
                AIM_NOTNULL(line, aimInfo, status);

                for (j = 0; j < design.designFunctional[i].numDesignVariable; j++) {

                    if (strcasecmp(design.designFunctional[i].dvar[j].name, "NonInertial_Rotation_Rate") != 0) continue;

                    status = sscanf(line, "%lf", &design.designFunctional[i].dvar[j].value[1]);
                    if (status != 1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
                    AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
                    break;
                }

                // read the dFun/dNonInertial_Rotation_Rate[2]
                status = getline(&line, &nline, fp); iline++;
                if (status == -1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
                AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
                AIM_NOTNULL(line, aimInfo, status);

                for (j = 0; j < design.designFunctional[i].numDesignVariable; j++) {

                    if (strcasecmp(design.designFunctional[i].dvar[j].name, "NonInertial_Rotation_Rate") != 0) continue;

                    status = sscanf(line, "%lf", &design.designFunctional[i].dvar[j].value[2]);
                    if (status != 1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
                    AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
                    break;
                }
            }


            numShapeVar = 0; // Need to re-zero every functional loop

            if (checkGeomShape == (int) true) {
                // zero out previous derivatives
                for (j = 0; j < design.designFunctional[i].numDesignVariable; j++) {
                    if (design.designFunctional[i].dvar[j].type != DesignVariableGeometry) continue;
                    numShapeVar++;
                    for (k = 0; k < design.designVariable[j].var->length; k++ ) {
                      design.designFunctional[i].dvar[j].value[k] = 0;
                    }
                }
            }

            // No body information if there are no Geometry derivatives
            if (numShapeVar == 0) numBody = 0;

            for (ibody = 0; ibody < numBody; ibody++) {

              // Rigid motion design variables
              status = findHeader("Current derivatives of", &line, &nline, &iline, fp);
              AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);

              // Skip reading rigid motion design variables for now
             
              // Read shape design variables
              status = findHeader("Current derivatives of", &line, &nline, &iline, fp);
              AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);

              for (j = 0; j < design.designFunctional[i].numDesignVariable; j++) {

                  if (design.designFunctional[i].dvar[j].type != DesignVariableGeometry) continue;

                  for (k = 0; k < design.designVariable[j].var->length; k++ ) {

                      // read the dFun/dDesignVar[k]
                      status = getline(&line, &nline, fp); iline++;
                      if (status == -1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
                      AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);
                      AIM_NOTNULL(line, aimInfo, status);

                      status = sscanf(line, "%lf", &dfun_dvar);
                      if (status != 1) status = CAPS_IOERR; else status = CAPS_SUCCESS;
                      AIM_STATUS(aimInfo, status, "rubber.data line %d", iline);

                      // accumulate derivatives across bodies
                      design.designFunctional[i].dvar[j].value[k] += dfun_dvar;
                  }
              }
            }
        }

        status = CAPS_SUCCESS;

    cleanup:

        if (line != NULL) free(line); // Must use free!
        if (fp   != NULL) fclose(fp);

        return status;
    }

    // Make FUN3D directory structure/tree
    int fun3d_makeDirectory(void *aimInfo)
    {
        int status; // Function return status

        char filename[PATH_MAX];

        char flow[] = "Flow";
        char datafile[] = "datafiles";
        char adjoint[] = "Adjoint";
        char rubber[] = "Rubberize";

        printf("Creating FUN3D directory tree\n");

        // Flow
        status = aim_mkDir(aimInfo, flow);
        AIM_STATUS(aimInfo, status);

        // Datafiles
        sprintf(filename, "%s/%s", flow, datafile);
        status = aim_mkDir(aimInfo, filename);
        AIM_STATUS(aimInfo, status);

        // Adjoint
        status = aim_mkDir(aimInfo, adjoint);
        AIM_STATUS(aimInfo, status);

        // Rubber
        status = aim_mkDir(aimInfo, rubber);
        AIM_STATUS(aimInfo, status);

        status = CAPS_SUCCESS;

    cleanup:
        return status;
    }



    // Morphing input
    // First time through and morphing
    // -  Write bodies and mesh to disc only if mesh is linked a
    // -  AIM_CP_FIle the meshfile
    //


    // aim_storeMeshRef(aimInfo, meshRef, MESHEXTENSION);
    //aim_storeMeshRef(aimInfo, meshRef, MESHEXTENSION);
    //
    //aimMeshRef meshRef2;
    //aim_initMeshRef(&meshRef2);
    //aim_loadMeshRef(aimInfo, &meshRef2);
    //aim_freeMeshRef(&meshRef2);

    // Logic for selecting/setting mesh pointer if morphing the mesh
    int fun3d_morphMeshLogic(void *aimInfo, int storeAllowed, aimMeshRef **meshRef, aimMeshRef *meshRefObj)
    {
        int status = CAPS_SUCCESS;

        AIM_NOTNULL(meshRefObj, aimInfo, status);

        if (*meshRef != NULL && storeAllowed == (int) true) { // If we are NOT null lets store the mesh - if allowed

            status = aim_storeMeshRef(aimInfo, *meshRef, MESHEXTENSION);
            AIM_STATUS(aimInfo, status);

            *meshRef =  meshRefObj;

           // Lets "reload" the meshRef now - A little awkward but.....
           status = aim_loadMeshRef(aimInfo, *meshRef);
           AIM_STATUS(aimInfo, status);

        } else if (*meshRef != NULL  && storeAllowed == (int) false) { // If we are NOT null

             // Do nothing

        } else { // *meshRef == NULL

            *meshRef =  meshRefObj;

            // Lets "load" the meshRef now
            status = aim_loadMeshRef(aimInfo, *meshRef);
            AIM_STATUS(aimInfo, status);
        }

        cleanup:
            return status;
    }


    //{
    //    int status = CAPS_SUCCESS;
    //
    //    AIM_NOTNULL(meshRefObj, aimInfo, status);
    //
    //    if (*meshRef != NULL && storeAllowed == (int) true) { // If we are NOT null lets store the mesh
    //        status = aim_storeMeshRef(aimInfo, *meshRef, MESHEXTENSION);
    //        AIM_STATUS(aimInfo, status);
    //
    //        meshRef = NULL;
    //    }
    //
    //    *meshRef =  meshRefObj;
    //
    //    // Lets "reload" the meshRef now - A little awkward but.....
    //    status = aim_loadMeshRef(aimInfo, *meshRef);
    //    AIM_STATUS(aimInfo, status);
    //
    //    cleanup:
    //        return status;
    //}

    // Map the old surface tessellation on to the new bodies
    int fun3d_morpMeshUpdate(void *aimInfo,  aimMeshRef *meshRef, int numBody, ego *bodies)
    {
        int status = CAPS_SUCCESS;
        int i=0;
        int state, numVert;
        ego bodyMapping;
        ego body;
        ego tess;

        // Have the number of bodies changed?
        if (meshRef->nmap != numBody) {
            printf("The number of original surface meshes does NOT equal the number of current bodies!\n");
            AIM_STATUS(aimInfo, CAPS_MISMATCH);
        }

        // Are the bodies topological equivalent?
        for (i = 0; i < meshRef->nmap; i++) {

            status = EG_statusTessBody(meshRef->maps[i].tess, &body, &state, &numVert);
            AIM_STATUS(aimInfo, status);

            status = EG_mapBody(body, bodies[i], "_faceID",  &bodyMapping); // "_faceID" - same as in OpenCSM
            if (status != EGADS_SUCCESS || bodyMapping != NULL) {

                printf("New and old body %d (of %d) do not appear to be topologically equivalent!\n", i+1, meshRef->nmap);

                if (bodyMapping != NULL) {
                    printf("Body mapping isn't NULL!\n");
                }

                AIM_STATUS(aimInfo, CAPS_MISMATCH);
            }
        }

        // Now lets "tweak" the surface tessellation - map the old tessellation to the new bodies
        for (i = 0; i < meshRef->nmap; i++) {

            status = EG_copyObject(bodies[i], NULL, &body);
            AIM_STATUS(aimInfo, status);

            status = EG_mapTessBody(meshRef->maps[i].tess,
                                    body,
                                    &tess);
            AIM_STATUS(aimInfo, status);

            status = EG_deleteObject(meshRef->maps[i].tess);
            meshRef->maps[i].tess = tess;

        }

        cleanup:
            return status;
    }
    (detail)
    by ryan
  289. Remove old egads file in aim_storeMeshRef. Set AIMptr to NULL when unlinking. (detail)
    by galbramc
  290. Suppress lint warnings (detail)
    by galbramc
  291. Fix for last commit (detail)
    by galbramc
  292. Add aim_storeMeshRef and aim_loadMeshRef (detail)
    by galbramc
  293. Doc updates (detail)
    by haimes
  294. Fix typo in doc, and short Python Units Appendix (detail)
    by galbramc
  295. Minor documentation (and coding) changes for the Python 1-to-1 CAPS interface (detail)
    by haimes
  296. Document 1-to-1 pyCAPS API. Change pyCAPS setLimits/getLimits to setLimitsSize/getLimitsSize. Add support for limit arrays to pyCAPS. (detail)
    by galbramc
  297. Addition of a CAPS API function that anly returns a Value Object's size (detail)
    by haimes
  298. Try again! (detail)
    by haimes
  299. Only set limits on OpenCSM DESPMTRs (detail)
    by haimes
  300. Completed the first cut for per element support of limits (detail)
    by haimes
  301. Adjust Value functions to support per element limits (detail)
    by haimes
  302. Update bfr instructions (detail)
    by galbramc
  303. Fix lint error (detail)
    by haimes
  304. readd multifidelity phasing examples (detail)
    by dongjoon
  305. Read/write and update setLimits/getLimits for per element limits (detail)
    by haimes
  306. Skeleton additions for adding per element limits (detail)
    by haimes
  307. Support for higher precssion xfoil executables. Add BoundaryLayerIntersect meshProp for AFLR4 and AFLR3. (detail)
    by galbramc
  308. Compile needed aflr43 files (detail)
    by galbramc
  309. Upgrade to AFLR 10.22.23 (detail)
    by galbramc
  310. Uprev CAPS (detail)
    by haimes
  311. Update corasairlite README to indicate hoburg_blackbox.py requies scipy. Remove hoburg_lsqp.py from testing. (detail)
    by galbramc
  312. delete duplicate file (detail)
    by dongjoon
  313. Fix sensitivites with AFLR and TRANSP. Fix check for return codes in caps_info/caps_analysisInfo in pyCAPS. (detail)
    by galbramc
  314. Don't run corsairlite scipy exemples without scipy (detail)
    by galbramc
  315. Remove unused variable to fix stanalizer (detail)
    by galbramc
  316. cCAPS example fix (detail)
    by galbramc
  317. Stanalizer fixes (detail)
    by galbramc
  318. Fixes for dealing with TRANSP surfaces. Add AFLR3 TRANSP tests. (detail)
    by galbramc
  319. Turn off wake for all tetgen examples (detail)
    by galbramc
  320. Fix SU2 to support internal BCs. TetGen does not support internal surfaces. (detail)
    by galbramc
  321. Add TRANSP_UG3_GBC testing. Don't allow TRANSP_SRC_UG3_GBC for AFLR with CAPS. echo exectables when running tests. (detail)
    by galbramc
  322. Codify corsairlite phasing example as commandline scripts (detail)
    by galbramc
  323. Only set signals from the python Main Thread. (detail)
    by galbramc
  324. Catch import signal ValueError. (detail)
    by galbramc
  325. CorsairLite doc update (detail)
    by haimes
  326. Various small cleanups (detail)
    by galbramc
  327. Fix signal handling in pyCAPS (detail)
    by galbramc
  328. Small Makefile cleanup (detail)
    by galbramc
  329. Add intentPhase to corsair capsPhase examples (detail)
    by galbramc
  330. Upgrade AFLR version check to 10.22.22 libraries. Add more AFLR3 tests. (detail)
    by galbramc
  331. Update training solution (detail)
    by galbramc
  332. Fix bug not removing .tessType for Tri EGADS tessellations (detail)
    by galbramc
  333. Updated training box wing to remove capsIgnore (detail)
    by galbramc
  334. Cleanup corsair examples a little (detail)
    by galbramc
  335. Add intentPhrase and history to pyCAPS (detail)
    by galbramc
  336. Replaced viscous wall bc to inviscid for Wing1 (detail)
    by nitin
  337. changed viscous wall bc to inviscid for Wing1 (detail)
    by nitin
  338. delete corsairlite example multifidelity (detail)
    by dongjoon
  339. Bug fix for cart3d with geometric sensitvities (detail)
    by galbramc
  340. Add symmetry inputs to cart3d (detail)
    by galbramc
  341. Updated SU2 AIM for compatibility with the latest (SU2-7.3.1) (detail)
    by nitin
  342. Protect value index from changes in aimCalcOutput (detail)
    by galbramc
  343. lint fixes (detail)
    by galbramc
  344. fix tabs to spasces (detail)
    by dongjoon
  345. Fix warning (detail)
    by galbramc
  346. Fix aimTransfer to use surface to volume maps (detail)
    by galbramc
  347. modify corsair examples to generate pickle (detail)
    by dongjoon
  348. Lint and memory leak fixes (detail)
    by galbramc
  349. delete duplicate examples/corsairlite/phase_design directory (detail)
    by dongjoon
  350. Update multifidelity examples with no hard coded paths and phaseStart (detail)
    by dongjoon
  351. Update corsairlite examples with multifidelity phasing (detail)
    by dongjoon
  352. Fix copy/pasta mistake (detail)
    by galbramc
  353. Fix boundary indexing for aflr3 to mach capsGroup indexing (detail)
    by galbramc
  354. lint fixes (detail)
    by galbramc
  355. Fix AFLR NMakefiles (detail)
    by galbramc
  356. Plug memory leak in aflr3 and run new Symmetry testing with MESH (detail)
    by galbramc
  357. Reorder AFLR libraries (detail)
    by galbramc
  358. Upgrade to AFLR 10.22.21 with support for sensitvities on symmetry planes (detail)
    by galbramc
  359. os independent file paths for corsair examples (detail)
    by galbramc
  360. Ignore corsairlite for legacy regression tests (detail)
    by galbramc
  361. Use cdef in fun3dNamelist.pyx to avoid segfault during garbage collection (detail)
    by galbramc
  362. Forgot a file (detail)
    by galbramc
  363. embedded python updates (detail)
    by galbramc
  364. Fix divide by zero (detail)
    by galbramc
  365. Relax tolerances for cvxopt (detail)
    by galbramc
  366. Replaced serveCSM with serveESP (detail)
    by nitin
  367. added figures to html version, consistent with pdf (detail)
    by nitin
  368. Update corsairlite kulfan models (detail)
    by dongjoon
  369. Copy hoburg.pl for corsair testing. Ignore corsair in C regressions (detail)
    by galbramc
  370. Cleanup corsairlite capsPhase examples a little (detail)
    by galbramc
  371. Run corsairlite qp for MINIMAL testing (detail)
    by galbramc
  372. Fix examples copy for corsairlite (detail)
    by galbramc
  373. Enable corsairlite test again. (detail)
    by galbramc
  374. Don't test corsairlite yet (detail)
    by galbramc
  375. Defer scipy import error for corsair kulfan datatype (detail)
    by galbramc
  376. Add corsairlite examples (detail)
    by galbramc
  377. Add corsairlite (detail)
    by galbramc
  378. Some dox cleanup (detail)
    by galbramc
  379. Add caps.phaseNewCSM to pyCAPS. Enalbe use of phaseNewCSM in pyCAPS Problem. (detail)
    by galbramc
  380. Updated CAPS overview dox, *_dox.cfg, *_header.tex to fix warnings (detail)
    by nitin
  381. Add caps_phaseNewCSM to the CAPS API (detail)
    by haimes
  382. Fix bug specifuing Mesh_Sizing on Edges for aflr4 (detail)
    by galbramc
  383. Update phasing tests. Fix Multiple_Mesh for TetGen. (detail)
    by galbramc
  384. Make updates fix directory removal under error (detail)
    by haimes
  385. Cleanup phasing in pyCAPS (detail)
    by galbramc
  386. Include IDE's parent info in phaseUtil and fix some minor issues (detail)
    by haimes
  387. Complete phaseUtil (detail)
    by haimes
  388. Add AnalysisIn derivatives in sens file for tacs and fun3d (detail)
    by galbramc
  389. Add the phaseUtil app -- still needs filling out (detail)
    by haimes
  390. Change skeleton AIM so it can be used as part of the ESP IDE tutorial (detail)
    by haimes
  391. Add mses executables to ESPbfr (detail)
    by galbramc
  392. Protect FunID read against a corrupt file (detail)
    by haimes
  393. Revert adding debug in Problem.__init__ (detail)
    by galbramc
  394. Output file position on Journal read during debugging (detail)
    by haimes
  395. Guard pyCAPS.Problem.__init__ caps calls with caps_debug (detail)
    by galbramc
  396. Stanalizer fix (detail)
    by galbramc
  397. Fix memory leak in Cart3D data transfer (detail)
    by galbramc
  398. Fix bug in last commit. Cleanup caps_preAnalysiX. Add forgotten Cart3D FSI example. (detail)
    by galbramc
  399. Put user name and date/time stamp in capsLock (detail)
    by haimes
  400. fix memory leak in msesAIM (detail)
    by galbramc
  401. Lint fixes (detail)
    by galbramc
  402. another scan-build fix (detail)
    by galbramc
  403. scan-build fixes (detail)
    by galbramc
  404. Add environment variable to output Journal entries as they process (detail)
    by haimes
  405. Fix warning (detail)
    by galbramc
  406. Dedicated function to call aim_UpdateState. Re-formulate phasing/continuation in pyCAPS Problem constructor. Indent AIM error messages. Add Displacement data transfer to Cart3D for FSI. Only allow cals to caps_getDataSet in aimPreAnalysis. Do not allow disk manipulation in aimUpdateState. (detail)
    by galbramc
  407. Fix childByName when in debug mode (detail)
    by haimes
  408. Finally the correct Windoze executable (detail)
    by galbramc
  409. Update avl exec on Linux and Windoze (detail)
    by galbramc
  410. Fix both the documentation and the code so they are consistent with adding const to the AIM functions Pre and Exec (detail)
    by haimes
  411. update jfd3AIM to adjust for recent API changes (detail)
    by jfdannen
  412. Reinstate no intent phrase flag (detail)
    by haimes
  413. Try that again (detail)
    by galbramc
  414. Update macOS avl executables without X11 dylib dependency (detail)
    by galbramc
  415. Don't journal on initPhrase calls in caps_open (detail)
    by haimes
  416. Revert last commit (detail)
    by haimes
  417. Turn off journaling of intentPhrase in caps_open (detail)
    by haimes
  418. lint fixes (detail)
    by galbramc
  419. So many def files... (detail)
    by galbramc
  420. Fixes for delaundo (detail)
    by galbramc
  421. Another forgotten def file (detail)
    by galbramc
  422. Missed one (detail)
    by galbramc
  423. aimUpdateState is no longer optional (detail)
    by galbramc
  424. Forgot def file (detail)
    by galbramc
  425. Add aimUpdateState to su2 AIM, and fix warnings (detail)
    by galbramc
  426. Add aimUpdateState to nastran and poinwise AIMs (detail)
    by galbramc
  427. Add aimUpdateState to hsm, interference, masstran, mystran, and aimUtil.h (detail)
    by galbramc
  428. Fix writing a Integer Value Object that is NULL (detail)
    by haimes
  429. Add aimUpdateState to fun3dAIM. Call aim_UpdateState in post analysis during reload. (detail)
    by galbramc
  430. Fix lint issue on skeletonAIM (detail)
    by haimes
  431. Fix warnings from last commit (detail)
    by haimes
  432. Protect against writing NULL double value objects; Update skeleton AIM (detail)
    by haimes
  433. Fix applying offset to NULL pointer (detail)
    by galbramc
  434. Update avl reference data. Plug memory leak in egadsTess (detail)
    by galbramc
  435. Fix aimUpdateState in egadsTess AIM (detail)
    by galbramc
  436. Don't run mystran_PyTest on Windoze (detail)
    by galbramc
  437. Forgot def file (detail)
    by galbramc
  438. Remove on too many lines (detail)
    by galbramc
  439. Fix warning from last commit (detail)
    by galbramc
  440. More aimUpdateState updates. Remove some redundant tests (detail)
    by galbramc
  441. Add aimUpdateState to a number of AIMs. Turn on CLink between Phases. (detail)
    by galbramc
  442. Misseed one astros in training (detail)
    by galbramc
  443. Allow aim_relPath to cross Phases (detail)
    by haimes
  444. Guard againts running mastros test when mastros does not exist (detail)
    by galbramc
  445. Fixes for calling aimUpdateState in caps_preAnalysis (detail)
    by galbramc
  446. Plug memory leak (detail)
    by galbramc
  447. More mses tests. Add aimUpdateStatus to avlAIM. Other small fixes. (detail)
    by galbramc
  448. Allow for debug mode coming into caps_outputObjects (detail)
    by haimes
  449. Allow for debug mode coming into caps_outputObjects (detail)
    by haimes
  450. in pyCAPS.Problem(), use running Caps Problem if it already exists (detail)
    by jfdannen
  451. Add phasing xfoil tests (detail)
    by galbramc
  452. Add Phasing test to pyCAPS unit testing. Fix probemName misspelling. (detail)
    by galbramc
  453. Turn off Analysis links for now (detail)
    by haimes
  454. Fix the warnings from the last commit (detail)
    by haimes
  455. First cut at Analysis disk links for new Phases (detail)
    by haimes
  456. Reduce execution time in legacy xfoil example (detail)
    by galbramc
  457. Faster geometry construction for ESP_Commit (detail)
    by galbramc
  458. Add some more timing (detail)
    by galbramc
  459. Remove incorrect CL derivatives from msesAIM. Run one test per aim for MINIMAL tests. (detail)
    by galbramc
  460. Fix last commit (detail)
    by haimes
  461. Prepare the AIM utilities for Analysis directory links (detail)
    by haimes
  462. Missed one free (detail)
    by galbramc
  463. lint fixes (detail)
    by galbramc
  464. Use aimUpdateState in msesAIM. Cache sensitvities in msesAIM. Expose more inputs in msesAIM. (detail)
    by galbramc
  465. Implement undocumented caps_modifiedDesPmtrs so that the IDE can know which DESPMTRs have been modified by CAPS (detail)
    by haimes
  466. Some more mses updates and regression script fix (detail)
    by galbramc
  467. Don't check alpha for TargetCL Cart3D test (detail)
    by galbramc
  468. Add TargetCL to Cart3D and enable Cart3D 2D mode (detail)
    by galbramc
  469. Try that again (detail)
    by galbramc
  470. Fix infinite loop in convert_doubleToString (detail)
    by galbramc
  471. Fix calling updateState when an AnalysisIn Object has changed (detail)
    by haimes
  472. Add the AIM function aimUpdateState which will allays be the first function executed in the sequence (detail)
    by haimes
  473. A few more mses corrections (detail)
    by galbramc
  474. Adjust mses data (detail)
    by galbramc
  475. mses updates (detail)
    by galbramc
  476. Remove caps_resetAnalysis from the API (detail)
    by haimes
  477. Use curvature weighted point distribution for avl/xfoil/mses (detail)
    by galbramc
  478. Remove caps_resetAnalysis from pyCAPS (detail)
    by galbramc
  479. Don't write 'empty' rubberize files (detail)
    by galbramc
  480. "fix" to fun3dAIM when to write/read shape sensitivities (detail)
    by ryan
  481. Fix intent phrase sync issue on initialization (detail)
    by haimes
  482. Add initial history for GeometryIn, Analysis and AnalysisIn Objects (detail)
    by haimes
  483. Fix journaling so that changing DESPMTR (GeometryIn) dimensioning is handled (detail)
    by haimes
  484. Remove old caps_open CSM reload option and replace it with the new (detail)
    by haimes
  485. Fix history addition for reloading CSM and new GeometryIn Value Object (detail)
    by haimes
  486. Relax tolerance and try to get consistent xfoil results on all machines (detail)
    by galbramc
  487. Update mses data. (detail)
    by galbramc
  488. Update xfoil data. Don't set OCS_CONPMTR when journaling (detail)
    by galbramc
  489. More robust xfoil execution (detail)
    by galbramc
  490. Update legacy test xfoil data (detail)
    by galbramc
  491. Adjust tolerances (detail)
    by galbramc
  492. Add mses OpenMDAO example (detail)
    by galbramc
  493. Missed some test that needed updated reference data (detail)
    by galbramc
  494. Use EGADS tessellator for airfoil files (detail)
    by galbramc
  495. Fix warning clang 13.1.6 warning (detail)
    by galbramc
  496. Fix full path on CSM filename for oPNewCSM option with caps_open (detail)
    by haimes
  497. Forgot to close a file (detail)
    by galbramc
  498. Fix msesAIM sensitivities (detail)
    by galbramc
  499. Support a directory of CSM/UDC files at init or CSM reload for caps_open; test for all analyses past post for completing a Phase (detail)
    by haimes
  500. Don't write fun3d Rubberize files when not needed (detail)
    by galbramc
  501. Don't write out body information to rubber.data for only AnalysisIn sensitvities (detail)
    by galbramc
  502. Stanalizer fix (detail)
    by galbramc
  503. Add avl 3.40 min version error message (detail)
    by galbramc
  504. Remove libquadmath dependency on DARWIN64 (detail)
    by galbramc
  505. Add avl 3.40 to ESPbfr (detail)
    by galbramc
  506. Plug one more memory leak (detail)
    by galbramc
  507. Fix array bound issue in avlmrf (detail)
    by galbramc
  508. Move variable declarations to top of functions (detail)
    by galbramc
  509. Fix avl NMakefile. Fix uninitialized data. (detail)
    by galbramc
  510. Lint and memory leak fixes (detail)
    by galbramc
  511. aimBackdoor has been removed from the avl AIM (detail)
    by galbramc
  512. avl fixes (detail)
    by galbramc
  513. Upgrade to avl 3.41 (detail)
    by galbramc
  514. Change caps_delete to caps_markForDelete in pyCAPS (detail)
    by galbramc
  515. Change caps_delete to caps_markForDelete (detail)
    by haimes
  516. Preserve pyCAPS objects when calling caps_delete. caps_delete and pyCAPS delete will be renamed. (detail)
    by galbramc
  517. Revert astros example (detail)
    by galbramc
  518. Fix last scan-build error (detail)
    by haimes
  519. Add history to geometry objects that are either new inputs or all outputs when reloading a CSM file (detail)
    by haimes
  520. Fix scan-build complaint (detail)
    by haimes
  521. lint fixes (detail)
    by galbramc
  522. Restote attributes and history on geometry objects with a CSM reload (detail)
    by haimes
  523. Update legacy su2 test (detail)
    by galbramc
  524. Add some egadsTess NodeBody tests (detail)
    by galbramc
  525. Fix BC indexing for meshRef (detail)
    by galbramc
  526. Add history to geometry outs and other minor updates (detail)
    by haimes
  527. Use enum instead of numerical value for checking stFlag (detail)
    by haimes
  528. Also return row vector in caps_getValue (detail)
    by galbramc
  529. Patch up some potential problems with restart/journaling and changing OpenCSM dimensions (detail)
    by haimes
  530. Add read-only option on caps_open -- not well tested (detail)
    by haimes
  531. remove jfd3AIM from aim/Makefile (detail)
    by jfdannen
  532. add hfd3AIM for testing Bounds and DataSets (detail)
    by jfdannen
  533. Add new caps_delete to pyCAPS (detail)
    by galbramc
  534. Reconcile addHistory with writeSerialNum (detail)
    by haimes
  535. Add history to caps_makeValue (detail)
    by haimes
  536. Upgrade to mystran 13.3a (detail)
    by galbramc
  537. Take away double CSM build ifdef in caps_open (detail)
    by haimes
  538. Add CAPS open option to ignore object delete markers; return delete status in caps_info (detail)
    by haimes
  539. Actually write the serial number in caps_writeSerialNum (detail)
    by haimes
  540. Update legacy example (detail)
    by galbramc
  541. lint fix and update astros Design example (detail)
    by galbramc
  542. Stanalizer fix (detail)
    by galbramc
  543. Fix warning (detail)
    by galbramc
  544. Fix memory leaks. Journal caps_setValue(NULL). (detail)
    by galbramc
  545. Only write sNum to the Problem file if that is all that is needed (detail)
    by haimes
  546. Minor fixes & move sNum to beginning of problem file (detail)
    by haimes
  547. Remove Bound directory during deletion and fix up internal Parameter index when there are deletions (detail)
    by haimes
  548. re-expose su2 variables for aeroelastic cases (detail)
    by nitin
  549. New phase deletion fleshed out (detail)
    by haimes
  550. Remove capsLock beforey renmaing a phase on caps_close (detail)
    by galbramc
  551. Fix logic for tracking pyCPAS ProblemState (detail)
    by galbramc
  552. Update makefiles to run skeletonAIM example (detail)
    by galbramc
  553. Fix skeleton AIM (detail)
    by galbramc
  554. Hold on to and delete User Value Objects at a complete CAPS close; change the meaning of caps_delete (still need to do the deletion at start of a new phase) (detail)
    by haimes
  555. SU2 AIM updated for SU2-7.3.0, Changed boundary markers from numbers to strings (detail)
    by nitin
  556. SU2 AIM updated for SU2-7.3.0, Changed boundary markers from numbers to strings (detail)
    by nitin
  557. Fix mses memory leak (detail)
    by galbramc
  558. Fix legacy script. Add caps_intentPhrase to pyCAPS. (detail)
    by galbramc
  559. scan-build fix (detail)
    by galbramc
  560. Add Cheby_Mode output and sensitvities to msesAIM (detail)
    by galbramc
  561. lint fixes (detail)
    by galbramc
  562. Fix warnings (detail)
    by galbramc
  563. Make relaoding AIMs lazy. Remove unused problem->exec. Enable Journaling/Phasing for aflr3 and fun3d. (detail)
    by galbramc
  564. Fix caps_size in debug mode for Dynamic Outputs (detail)
    by haimes
  565. Implementation of new History tracking (detail)
    by haimes
  566. dox fix (detail)
    by ryan
  567. lint fixes for aflr4 (detail)
    by galbramc
  568. Enable phasing and journaling for aflr4AIM (detail)
    by galbramc
  569. lint fixes (detail)
    by galbramc
  570. Don't call analsysisInfo with problem object (detail)
    by galbramc
  571. scan-build fixes (detail)
    by galbramc
  572. Close ugrid file after reading header (detail)
    by galbramc
  573. Use correct CAPSLONG in pyCAPS on Windoze (detail)
    by galbramc
  574. Update caps_jrnlRead with funID (detail)
    by galbramc
  575. Add funID to caps_jrnlWrite. Fix call to caps_ownerInfo. Fix memory leak in egadsTess. (detail)
    by galbramc
  576. Update pyCAPS for new history tracking. Fixes in su2. Test Phasing with egads/tetgen/su2. (detail)
    by galbramc
  577. Move CAPS towards the new history tracking (detail)
    by haimes
  578. Revert changes in CAPS/src from previous accidental commit (detail)
    by galbramc
  579. Fix training files from last commit. Remove bodyTessMappingStruct in lieu of .mixed attribute. Fixes for Journaling. Fixes for autoExec when the upstream AIM unputs are dirty. Store mesh on disk for egadsTessAIM to work with Journaling and Phasing. Update tetgenAIM to work with Journaling and Phasing. Add tetgen pyCAPS unit tests. (detail)
    by galbramc
  580. Remove caps_freeOwner from pyCAPS. Add commented out caps_getHistory and caps_intentPhrase for the future. (detail)
    by galbramc
  581. Put caps_freeOwner back in the def file (detail)
    by haimes
  582. remove caps_setOwner from caps.py (detail)
    by jfdannen
  583. Prepare for history changes (detail)
    by haimes
  584. Add aim_readBinaryUgridHeader (detail)
    by galbramc
  585. Remove addHistory and getHistory from pyCAPS (detail)
    by galbramc
  586. Allow for removing the entire phase at caps_close (detail)
    by haimes
  587. Don't call caps_delete in pyCAPS for now (detail)
    by galbramc
  588. Add aim_rmFile (detail)
    by galbramc
  589. Change pyCAPS caps_triangulate to caps_getTriangles (detail)
    by galbramc
  590. Add caps_printErrors; change caps_triangulate to caps_getTriangles and other fixes (detail)
    by haimes
  591. Some dox cleanup for tacsAIM (detail)
    by galbramc
  592. tacs dox fix (detail)
    by ryan
  593. fixes for 'Flow' directory switching for fun3dAIM (detail)
    by ryan
  594. Update flowchart viewing and check for parameter value object uniqueness (detail)
    by haimes
  595. Track closure of problem object to avoid calling caps_delete. This will leak attributes for now if the problem object is explicitly closed. (detail)
    by galbramc
  596. Track closure of problem object to avoid calling caps_delete. This will leak attributes for now if the problem object is explicitly closed. (detail)
    by galbramc
  597. Training fix (detail)
    by galbramc
  598. Undo accidental change (detail)
    by galbramc
  599. Some more training fixes (detail)
    by galbramc
  600. Fix comments in training examples (detail)
    by galbramc
  601. dox fixes (detail)
    by galbramc
  602. Require using Design_Variable_Relation for bdf files. (detail)
    by galbramc
  603. dox fix to clarify symmetry boundary condition requirements for fun3d (detail)
    by ryan
  604. Disable autoExecution for functions in capsBase when in debug mode (detail)
    by haimes
  605. Add newline to printing of tuples that are NULL (detail)
    by haimes
  606. Fix memory leak from last commits (detail)
    by haimes
  607. Remove debug prints (detail)
    by haimes
  608. Update outputObjects and add Body and Tess count to AIM info for printObjects (detail)
    by haimes
  609. Remove the regeneration of FieldIn DataSets during AIM restart (detail)
    by haimes
  610. Revamp the way postAnalysis gets invoked during recycling (detail)
    by haimes
  611. Fix jouranling bug (detail)
    by galbramc
  612. Remove first OCSM build when starting a new phase updating the CSM script; don't write out value objects with the link nullified (detail)
    by haimes
  613. Add None arguments to outputObjects (detail)
    by galbramc
  614. Add stream output option to caps_outputObjects (detail)
    by haimes
  615. Add outputObjects to capsProblem (detail)
    by galbramc
  616. Fix bug found by Stanalyzer output (detail)
    by haimes
  617. First cut at DongJoon's CAPS flowchart (debugging) (detail)
    by haimes
  618. Fix caps_rmWild to support spaces in path (detail)
    by haimes
  619. Try to get by Cart3D tests again (detail)
    by haimes
  620. Make sure there is enough room for commands with quoted paths (detail)
    by haimes
  621. Allow for spaces in Problem paths (detail)
    by haimes
  622. Documentation updates and raise an error when caps_open is given a path with an included space (detail)
    by haimes
  623. Fix last commit (detail)
    by galbramc
  624. Try to plug unitialized values from last commit (detail)
    by haimes
  625. Implement a debug mode that does not journal or autoExec/autoFill (detail)
    by haimes
  626. Update .sens file for tacsAIM and fun3dAIM. Add Phasing test for avl. (detail)
    by galbramc
  627. add functional to fun3d options (undocumented) (detail)
    by ryan
  628. Fix writeTecplot (detail)
    by galbramc
  629. Fix for updated pyCAPS constructors (detail)
    by galbramc
  630. Fix last commit (detail)
    by galbramc
  631. Another try at fixing the memory leak. Update pyCAPS for the new caps_triangulate. Add caps_phaseStatus to pyCAPS. (detail)
    by galbramc
  632. Lets try that again (detail)
    by galbramc
  633. Another memory leak fix (detail)
    by galbramc
  634. Update caps.def (detail)
    by galbramc
  635. Update aimTransferUtilTest to test caps_ functions (detail)
    by galbramc
  636. Fix memory leaks from last commit (detail)
    by haimes
  637. Add mesh information to the data returned from caps_triangulate (detail)
    by haimes
  638. Adjust the calling sequence of caps_open to be consistent with the documentation (detail)
    by haimes
  639. Fix deriv bug in caps_writeValue (detail)
    by galbramc
  640. Fix memory corruption from cut & paste (detail)
    by haimes
  641. Add file handling functions to the def file (detail)
    by haimes
  642. Fix SegFault in caps_open CSM reload (detail)
    by haimes
  643. Regression test fixes (detail)
    by galbramc
  644. Update legacy test for PointwiseV18.5R1 (detail)
    by galbramc
  645. Try to fix Stanalyzer error from last commit (detail)
    by haimes
  646. Some corrections to Phase start with CSM reload (detail)
    by haimes
  647. Try again to fix Stanalyzer (scan-build) errors (detail)
    by haimes
  648. Try to fix Stanalyzer (scan-build) errors (detail)
    by haimes
  649. Implementation of new phase startup with CSM script reload -- needs more tessting (detail)
    by haimes
  650. Suppress lint (detail)
    by galbramc
  651. Ignore zero lenth units string in caps_makeValue (detail)
    by galbramc
  652. Fix warning and relax tolerance (detail)
    by galbramc
  653. Fix for caps_getDeriv. Lots of updates to msesAIM (detail)
    by galbramc
  654. Fix for caps_hasDeriv (detail)
    by galbramc
  655. Allow pyCAPS.Problem construction with a capsObj (detail)
    by galbramc
  656. Add missing reference quanteties (detail)
    by galbramc
  657. Updated legacy 'truth' avl values (detail)
    by galbramc
  658. Upgrade pointwimse AIM to support Pointwise 18.5. Rotate airfoils for astros. Add error checking for capsReference quantities in avl. (detail)
    by galbramc
  659. add stl2tess to Slugs/src (detail)
    by jfdannen
  660. Fix for last commit (detail)
    by galbramc
  661. Add more checks when reading sens file (detail)
    by galbramc
  662. Update the copyright year to 2022 (detail)
    by haimes
  663. Add SensFile reader to fun3dAIM (detail)
    by galbramc
  664. Fix memory leak (detail)
    by galbramc
  665. Fix memory leaks (detail)
    by galbramc
  666. Stanilizer fixes (detail)
    by galbramc
  667. Turn on mses unit test again (detail)
    by galbramc
  668. Fix warning and NMakefile (detail)
    by galbramc
  669. Fixes for last commit. Dissable mses test until we get new executables. (detail)
    by galbramc
  670. MSES seems to be working with sensitvities. Many other small fixes. (detail)
    by galbramc
  671. Fix relative path for geometry.view and analysis.view functions (detail)
    by galbramc
  672. Fix TACS test (detail)
    by galbramc
  673. Fix TACS sensitivity bug (detail)
    by galbramc
  674. First cut at MSES IO functions (detail)
    by haimes
  675. outLevel fixes (detail)
    by galbramc
  676. mses, xfoil and tacs fixes (detail)
    by galbramc
  677. Added initial msesAIM. Very much work in progress (detail)
    by galbramc
  678. Update awave error message (detail)
    by galbramc
  679. Lint fix (detail)
    by galbramc
  680. Dynamic Web Server library cleanup (detail)
    by haimes
  681. Revert back to testing just one wing with cart3d (detail)
    by galbramc
  682. Skiop inconsistency (detail)
    by galbramc
  683. Tighter tolerance (detail)
    by galbramc
  684. Enable multi-body for cart3d (detail)
    by galbramc
  685. Changes due to WV server library going dynamic (detail)
    by haimes
  686. Update getDeriv for GeometryOut for fattened Jacobian (detail)
    by galbramc
  687. Allow for passing a user pointer into browserMessage -- breaks compatibility! (detail)
    by haimes
  688. Fix sanitizer (detail)
    by galbramc
  689. doc fix (detail)
    by galbramc
  690. Warning fix (detail)
    by galbramc
  691. lint fixes (detail)
    by galbramc
  692. Forgot Windoze NMake (detail)
    by galbramc
  693. Add TACS AIM (detail)
    by galbramc
  694. Update pyCAPS examples to use caps_system call (detail)
    by galbramc
  695. Cart3D fixes. Remove os.chdir from doc. Add some Analysis.system calls. (detail)
    by galbramc
  696. Relax tolerances and skip openmdao when not available (detail)
    by galbramc
  697. More Cart3D fixes (detail)
    by galbramc
  698. Suppress ocsmBuild for sensitvities (to avoid confusion with an actual build). Fix memory leak in xddm. (detail)
    by galbramc
  699. Fix uninitialized data (detail)
    by galbramc
  700. Cart3D fixes (detail)
    by galbramc
  701. More xddm cleanup (detail)
    by galbramc
  702. xddm fix (detail)
    by galbramc
  703. scan-build fixes (detail)
    by galbramc
  704. Lint fixes (detail)
    by galbramc
  705. Minor cleanup of xddm (detail)
    by galbramc
  706. Tweak cart makefile (detail)
    by galbramc
  707. Update fun3d OpenMDAO example with dynamic outputs (detail)
    by galbramc
  708. Warning fix (detail)
    by galbramc
  709. Fix warning and properly suppress cart test when cart is not present (detail)
    by galbramc
  710. Update training example (detail)
    by galbramc
  711. Add auto execution for AnalysisDynO. Update Fun3D with AnalysisDynO. Add geometric sensitivties to Cart3D. Allow Cart3D trix file to write multiple bodies. Add Cart3D_OpenMDAO examples. Other smaller cleanup. (detail)
    by galbramc
  712. Remove AFLR3 .tmp.b8.ugrid file (detail)
    by galbramc
  713. Surpress delete message (for wildcards that don't exist) on Windows (detail)
    by haimes
  714. Fix Windows Warning (detail)
    by haimes
  715. First complete implementation of Analysis Dynamic Outputs (detail)
    by haimes
  716. Warning fix (detail)
    by galbramc
  717. Add wildcards to aim_rmDir (detail)
    by galbramc
  718. Initialize Dynamic Outs for Restart (detail)
    by haimes
  719. Begin the implementation of Analysis Dynamic Outputs (detail)
    by haimes
  720. Windoze fix (detail)
    by galbramc
  721. Fix last commit (detail)
    by galbramc
  722. Add aim_rmDir and update doc (detail)
    by galbramc
  723. lint fix (detail)
    by galbramc
  724. Fix for reading fun3d .forces with Design_Functional (detail)
    by galbramc
  725. Fix last commit (detail)
    by galbramc
  726. Lint fixes (detail)
    by galbramc
  727. Fix copy/pasta mistake (detail)
    by galbramc
  728. Add interferenceTest to regressoin testing (detail)
    by galbramc
  729. Minor corrections to interfaceAIM (detail)
    by haimes
  730. scan-build fix and dox fix (detail)
    by galbramc
  731. First cut at the Interference AIM and fix for instance number (detail)
    by haimes
  732. Fix AIM_ERROR that was just supposed to be printf (detail)
    by galbramc
  733. scan-build fixes (detail)
    by galbramc
  734. Missed a file (detail)
    by galbramc
  735. Remove static array size for fun3d Design_Functional output. Return list of list for matrix varaibles. (detail)
    by galbramc
  736. Remove fun3d redundant sensitivity calculations (detail)
    by galbramc
  737. Fix some typos (detail)
    by galbramc
  738. Fix bug in limits check in caps_setValue (detail)
    by galbramc
  739. Forgot a file (detail)
    by galbramc
  740. Fixes to fun3d design (detail)
    by galbramc
  741. Another warning fix (detail)
    by galbramc
  742. Fix warning (detail)
    by galbramc
  743. Forgot a file (detail)
    by galbramc
  744. Re-design fun3d design. (detail)
    by galbramc
  745. fixes for the previous fixes (detail)
    by ryan
  746. fix for fun objectives/functionals (detail)
    by ryan
  747. Fix for cart bc (detail)
    by ryan
  748. Lint fix (detail)
    by galbramc
  749. Fix vlmControl memory leak (detail)
    by galbramc
  750. Make avl smarter about when geometry file needs to be written. (detail)
    by galbramc
  751. UpRev to 1.21 (detail)
    by haimes
  752. Fix documentation links (detail)
    by galbramc
  753. another dox fix (detail)
    by ryan
  754. minor dox fix last one (detail)
    by ryan
  755. minor dox fix (detail)
    by ryan
  756. minor dox fix (detail)
    by ryan
  757. Clear aim_setSensivity flags in caps_build (detail)
    by galbramc
  758. Remove spurious Info printf and make sure we are between pre and post in caps_system (detail)
    by haimes
  759. Document AIM execution modes (detail)
    by haimes
  760. Don't use packaging module (detail)
    by galbramc
  761. Fix last commit (detail)
    by galbramc
  762. Try multiple times to get pointwise license in C example (detail)
    by galbramc
  763. Check OpenMDAO version in example (detail)
    by galbramc
  764. Add caps_system to pyCAPS (detail)
    by galbramc
  765. Add caps_system and add relative path to aim_system (detail)
    by haimes
  766. Upgrade to SU2 7.2.0. Minor avl fixes. (detail)
    by galbramc
  767. Try again and again for pointwise license (detail)
    by galbramc
  768. Adjust regression script (detail)
    by galbramc
  769. Suppress lint warnings (detail)
    by galbramc
  770. Fix warning (detail)
    by galbramc
  771. Cleanup hasDeriv/getDeriv and add derivatives outputs to avlAIM (detail)
    by galbramc
  772. Update the documentation and make the AIM file function naming consistent (detail)
    by haimes
  773. Add caps_journalState to the API (detail)
    by haimes
  774. Lint fix (detail)
    by galbramc
  775. Fix warning (detail)
    by galbramc
  776. Forgot the actual journal test (detail)
    by galbramc
  777. First test of journaling. Works with autoExect, manual exec needs work. (detail)
    by galbramc
  778. Replace verbosity with outLevel (detail)
    by galbramc
  779. Use environment variable to set outLevel=0 for CAPS training (not documented). (detail)
    by galbramc
  780. Add awave cCAPS example. Cleanup avl AutoSpan test. Return CAPS_EXECERR error on system call failure. (detail)
    by galbramc
  781. Comment out matplotlib import (detail)
    by galbramc
  782. fund3dAIM fixes (detail)
    by galbramc
  783. Add enum for caps_open flag (detail)
    by haimes
  784. Plug memory leak (detail)
    by galbramc
  785. Add M1 libraries to BFR tarball and adjust call to calcOutput for pointers that have not been used (detail)
    by haimes
  786. Remove one little space (detail)
    by galbramc
  787. Upgrade to AFLR 10.17.5 (detail)
    by galbramc
  788. Add auto-execution error message (detail)
    by galbramc
  789. Call postAnalysis on any auto-executed AIMs during journal reads (detail)
    by haimes
  790. fun3DAIM fixes (detail)
    by galbramc
  791. Add caps_getTessels to the API -- gives access to the analysis' tessellation objects (detail)
    by haimes
  792. Fix data transfer for legacy scripts (detail)
    by galbramc
  793. Remove capsLock in caps_close (detail)
    by galbramc
  794. Fix warnings (detail)
    by galbramc
  795. Lazier auto-execution. Enable auto-execution for data transfer. (detail)
    by galbramc
  796. Mesh Writer Doc updates (detail)
    by haimes
  797. Stanalizer fix for fclose. No idea why lint started complaining about it\!\?\!\?\! (detail)
    by galbramc
  798. Missed closing a file (detail)
    by galbramc
  799. Fix uninitialized data (detail)
    by galbramc
  800. Fix array out-of-bound (detail)
    by galbramc
  801. Fix memory leaks and return code for tetgen (detail)
    by galbramc
  802. One more warning fix (detail)
    by galbramc
  803. A sphere is still not a sphere (detail)
    by galbramc
  804. Fix warning (detail)
    by galbramc
  805. Fix Windoze build (detail)
    by galbramc
  806. Lint fixes (detail)
    by galbramc
  807. Remove duplicated CFD meshes on disk. Lots of refactoring... (detail)
    by galbramc
  808. fixed uninitialized variable in Slugs (detail)
    by jfdannen
  809. First cut at documenting mesh writers (detail)
    by haimes
  810. fix addressing bug in udpWarp; initial implementation of timVspSetup (detail)
    by jfdannen
  811. convert backslashes to forward slashes in filenames in udpVsp3 because anglescipt expects forward slashes (detail)
    by jfdannen
  812. properly rename vsp3 verification test cases (detail)
    by jfdannen
  813. ATTRRECYCLE forces UDPRIM to not be recycled; fix printing of SELECT with attrValu a number; update udpVsp3 to automatically run vsp; add data/vsp3 test cases; add propInteg*a test cases; use _plugsIgnore on Faces that should be ignored during cloud point reclassifications in Plugs; add udpWarp; add ablate0* test cases (detail)
    by jfdannen
  814. modify ocsmPrintBrep to show list Edges as degenerate rather than skipping them; add SPECIAL printCPs command to print the control points associated with all Nurbs in the Body on the top of the stack; add first version of udpVsp3 (detail)
    by jfdannen
  815. first version of udpVspComp (detail)
    by jfdannen
  816. fix bug that did not retain Edge attributes during an ELEVATE operation (detail)
    by jfdannen
  817. add mincp argument to udpNuscale and convertToBSplines functions; add ablate* test cases, including using Plugs; extend Plugs to be able to use DIMENSIONed DESPMTRs; fix bug in velocityOfEdge for Edges with dots that have changing tranges (detail)
    by jfdannen
  818. temporarily remove vspFuse* test cases (detail)
    by jfdannen
  819. analytic sensitivities for sketches; update .gsen and .tsen files; move sketch13* test cases to designY* (detail)
    by jfdannen
  820. start implementing analytic sensitivities for Sketches; add sketch13* test cases (detail)
    by jfdannen
  821. initial, very early, preliminary version of udpVspFuse and associated test cases (detail)
    by jfdannen
  822. fix error in serveESP.mak in previous commit (detail)
    by jfdannen
  823. fix error in serveESP.mak; fix debug code error for windoze (detail)
    by jfdannen
  824. change the SUBTRACTion of two co-planar SheetBodys such that if the Loop associated with the second Body does not cut a clean hole in the first Body, revert to the (default) scribing behavior for SheetBodys, that is scribe the first Body with the Edges from the second Body;  update the documentation for SUBTRACT; add scribe11* test cases; fix occasional bug associated with analytical sensitivities when DUMPing a .sens file from with .csm script (detail)
    by jfdannen
  825. add support for BLENDs with .C1side Attributes; add blend23* test cases; change serveESP.mak so that it does not error if PYTHONINC is not set (detail)
    by jfdannen
  826. uprev to v1.24 (ESP.html, ESP-localhost.html, ESP-help.html, OpenCSM.h, ocsm.rc) (detail)
    by jfdannen
  827. added ability to double-click on python error to open pyscript editor at the correct line (detail)
    by jfdannen
  828. update various testing scripts (detail)
    by jfdannen
  829. add udfLinalg and linalg1 test case; add sketch12* test cases (detail)
    by jfdannen
  830. another update to Makefile.LINUX64 (detail)
    by jfdannen
  831. update Makefile.LINUX64 to execute full test suite (detail)
    by jfdannen
  832. fix warnings in previous commit (detail)
    by jfdannen
  833. add ocsmTraceAttrs, ocsmTraceStors, ocsmGetFiletree, and ocsmShowTblOfContents; add ability to trace Attributes, Storges, the FileTree, and the provided representations in the .csm editor; limit number of files in File menu in ESP so that it does not overflow the display; add SPECIAL provides statement to work with ocsmShowTblOfContents (detail)
    by jfdannen
  834. fix bug that did not properly decrement the pattern counter for ENDIF statements after a PATBREAK was executed; fix bug that returned error after SELECTing a degenerate Edge (detail)
    by jfdannen
  835. take shortcut when creating tessellation sensitivities for Faces that do not have Edges that are the result of Boolean operations; update .tsen files for both 7.6.0 and 7.7.0 (detail)
    by jfdannen
  836. fix typo in text string in serveESP (detail)
    by jfdannen
  837. fix warning in previous commit (detail)
    by jfdannen
  838. fix bug that copied Csystems into a UDPRIM; add udfMechanism and mechanism* test cases (detail)
    by jfdannen
  839. add udfDeform to change BSpline control points associated with Faces (and Edges and Nodes) in a Body; add deform* test cases; modify some verification data to account for differences between 7.6.0 and 7.7.0 on all operating systems (detail)
    by jfdannen
  840. remove more clang warnings (detail)
    by jfdannen
  841. remove clang warnings (detail)
    by jfdannen
  842. remove GLOVES from ESP menu (for now) (detail)
    by jfdannen
  843. update data/capsExamples/verify_7.7.0 files; use EG_copyObject since EGADS now allows the copying of PCurves; fix typos in testScript.txt; updates to avoid warnings in latest version of clang (detail)
    by jfdannen
  844. allow cases with Edge-only tessellations to work; add edgeGrid* test cases; update 7.7.0 verification data for imprint5 (should fail); add PLOT_DISPLACE to plot displaced Edges based upon tessellation sensitivities (detail)
    by jfdannen
  845. fix recently-added bug associated with FD tessellation sensitivities for NodeBodys (detail)
    by jfdannen
  846. create verification data for OCC 7.7.0; make sure EVALUATE returns dot=0 (detail)
    by jfdannen
  847. compute tessellatiopn sensitivities correctly for a NodeBody; set and report sensitivity range properly when looking at only one component of tessellation sensitivities; add -forceFDs command line option to force finite difference sensitivities in serveESP (detail)
    by jfdannen
  848. protect against stanalyzer bug (detail)
    by jfdannen
  849. further improvements to flends; add flend10* test cases; fix memory leak when udfOffset encounters an error (detail)
    by jfdannen
  850. add code to protect for UDFs that have references to its input Model; add (hidden) option to create timingReport.txt file; improve flends; add flend9* test cases (detail)
    by jfdannen
  851. update flend8* test cases and their verification data (detail)
    by jfdannen
  852. fix lint error in udfMatchBodys; re-add 7.4.1 verification data for flend8* test cases (detail)
    by jfdannen
  853. change flend fits to be better in some cases; track down memory leaks (detail)
    by jfdannen
  854. fix problem erroneously flagged by lint in udpOffset; update errors reported by udfFlend; fix bug where wrong UDP storage was used in udfOffset (which caused problems when udpOffset was called more than once); remove SPECIAL test of EG_otherCurve; document .multiNode use in RULE command; fix bug where UDP storage is incorrectly cleared for an embedded UDP (in udpCsm); fix bug in udfFlend that sometimes did not correctly reverse one of the Loops; fix memory leak in EVALUATE EDGEKT, EDGECP, FACEUKT, FACEVKT, and FACECP when a signal is raised (detail)
    by jfdannen
  855. fix compiler warning in latest commit (detail)
    by jfdannen
  856. account for fact that Py_SetPythonHome was deprecated in Python 3.11; update udfOffset so that it can generate offsets on SolidBodys (for FLENDs); add offset(I-R)* test cases; use zebra stripe coloring for maximum curvature in ESP (displayType=4); update convertToBsplines to reuse Pcurves whenever possible; add udpBspline and bspline* test cases (detail)
    by jfdannen
  857. improve printing of Pcurves in ocsmPrintEgo; improve marking of Faces with _body and _brch Attributes when returned from a UDF; add PRINT_MAPPING_INFO define to OpenCSM; fix bug that did not account for Node and Edge sensitivities when report sensitivity range in serveESP; fix bug that occasionally did not properly compute Node tessellation sensitivities (detail)
    by jfdannen
  858. add EVALUATE EDGEKT, EVALUATE EDGECP, EVALUATE FACEUKT, EVALUATE FACEVKT, and EVALUATE FACECP; add evaluate3* test cases; add multiRegions* test cases; add SELECT FLIP to flip the order of rntities in at-sellist (detail)
    by jfdannen
  859. add copyAttr=0 argument to RULE and BLEND to copy Edge Attributes in xsects onto RULE/BLEND Edges; add blend29 and rule29 test cases (detail)
    by jfdannen
  860. improve test for matching Nodes in udfMatchBodys; adjust matchBodys5 test case to check at-at-parameters (detail)
    by jfdannen
  861. add arcLengths to ocsmPrintEgo; fix bug in udfMatchBodys when tol was large (detail)
    by jfdannen
  862. modify udfMatchBodys to transfer an Attribute from one Body to the other when the Nodes, Edges, or Faces match; add matchBody5 test case (detail)
    by jfdannen
  863. fix bug associated with UDP/UDF outputs that change shape (detail)
    by jfdannen
  864. remove stanalyzer false positive by disabling checks for one loop in udfTester1.c (detail)
    by jfdannen
  865. attempt to fix stanalizer error in udfTester1.c (detail)
    by jfdannen
  866. allow at-at-parameters from a UDP/UDF to have velocities; split udpTest into udfTester1 (to demonstrate matrix outputs from a UDP/UDF) and udpTester2 (to demonstrate output velocities from a UDP/UDF); adjust Makefiles and associated test cases (detail)
    by jfdannen
  867. add test.so to Makefiles; add diagnostic printouts when a Face does not tessellate; make sure all UDP/UDFs return output values to the numUdp instance (detail)
    by jfdannen
  868. allow number of rows and columns to be accessible in UDPs; allow at-at-parameters from a UDP/UDF to be vectors or matricies; add udp_error1 to udp_error9 as possible argument to CATBEG statement; fix bug that did not restore at-at-parameters when a UDP/UDF was recycled; refactor way UDP/UDF arguments are handled (detail)
    by jfdannen
  869. update header files to allow use of C++ main program; add simpleCSM.cpp and modify Makefile.DARWIN64 for testing (detail)
    by jfdannen
  870. change udfSlices to skip a slice if OpenCASCADE fails (rather than return an eror); add SET statement to udpWaffle;  add waffleB1 and waffleB2 test cases; fix bug in plotting of normals in serveESP and serveCSM; add PRINT_RULE_KNOTS to print number of knots in BSPLINEs entering a RULE or BLEND; allow -ATTRREALSENS to indicate a UDPRIM parameter that is intended to signal that Parameter is used within an included file; add waffleB3 test case to demonstrate this; add waffleB3.jrnl to demonstrate generation of .sens file for every DESPMTR without rebuilds (detail)
    by jfdannen
  871. update copyright notices (detail)
    by jfdannen
  872. remove training/data/session10/version99/* (detail)
    by jfdannen
  873. uprev to v1.23 (ESP.html, ESP-localhost.html, ESP-help.html, OpenCSM.h, ocsm.rc) (detail)
    by jfdannen
  874. put 1 second delay when opening a pyscript to make sure that the browser is ready to display the pyscript in the editor; do not change status of ESP if an error was found while executing a pyscript; update session10 training files to be consistent with new method for creating a large, multi-component, multi-discipline model; update Makefile.DARWIN64; update ESP_QuickReference; update testScript.txt (detail)
    by jfdannen
  875. write and test viewSimplySupport for transport test case (detail)
    by jfdannen
  876. more updates to training/session10 and CAPS/training/python (detail)
    by jfdannen
  877. more updates to transport training files (detail)
    by jfdannen
  878. update error handling in flapz.udc; first attempt at python files for new transport for CAPS training (detail)
    by jfdannen
  879. account for forward- and backward-slashes when opening a .udc (detail)
    by jfdannen
  880. update ereped6a and project verification data again; fix recently-added bug that causes a memory fault for some non-manifold Edges (detail)
    by jfdannen
  881. add Trace button in .csm editor to trace all top-level Parameters; reorganize session10 files to make it easier to build large, multi-component, multi-view models; update ereped6a, hollowC6, hollowC7, hollowCA, hollowCB, and project 3 verification data on 7.6.0 (because of issues highlighted by Xcode 14 on M1); update ereped6a and project3 verification data on 7.4.1 (because of issues highlighted by Xcode 14 on M1); add description of -dxdd flag to ESP-help (detail)
    by jfdannen
  882. update testScript.txt; fix possible buffer overflow in SPECIAL command (detail)
    by jfdannen
  883. update verification data for clearance1 and clerance4 to allow for slight differenes due to chaotic behavior of the EGADS tessellator (detail)
    by jfdannen
  884. convert all (deprecated) sprintf calls to snprintf (detail)
    by jfdannen
  885. update Verification.sh to use serveESP (detail)
    by jfdannen
  886. fix bug where result of SPECIAL/clearance was not recycled (detail)
    by jfdannen
  887. update .tsen files for designG5 and designG6 (detail)
    by jfdannen
  888. remove suppressions of sensitivity checks on designH2, designJ1c, designJ1d, and designJ5; add suppressions of sensitivity checks to designG5 and designG6 (for rounded tips); fix valgrind error in sensitivities in udpWaffle (detail)
    by jfdannen
  889. fix some compiler warnings in most recent commit (detail)
    by jfdannen
  890. add ocsmClearance; add clearance* test cases (detail)
    by jfdannen
  891. fix bug in serveESP that did not properly update the build status message after File->Edit->Save; implement analytic sensitivities in udpWaffle; add designX* test cases; make sure userPointer gets reset after perturbation is removed (detail)
    by jfdannen
  892. update designV1,gsen for 7.4 (detail)
    by jfdannen
  893. add ocsmAdjoint and testOcsmAdjoint (in serveESP); allow timPlotter to have two y-axes; add plotter3.py test case (detail)
    by jfdannen
  894. update adjoint test to remove (incorrect) compiler warning (detail)
    by jfdannen
  895. remove data/ide (because it is redundant with data/tutorial6); eliminate automatic build when entering CAPS mode (depend on the lazy evaluation in CAPS); enable sensitivity calculations for scribes and trims; add designW* test cases; fix bug that put wrong _edgeID on scribed Edges; update attrScribe, scribeWing, and scribedSphere test cases; create splitEdges.udc; add splitEdges* test cases (detail)
    by jfdannen
  896. remember name of Pyscript file for next Tool->Pyscript; clean up ESP messages after builds; remove code in esp.timSetCaps that removed the _finalize method; fix memory problem in timViewer for very long scene-graph meta-data buffers; reset magic number to zero to catch cases when a MODL is tried to be used after ocsmFree; modify IMPORT so that it properly marks NODE_BODYs; force tessellation if needed in timViewer; fix bug in ocsmLoadFromEgads that did not properly initialize the .ileft and .irite Branches; remove underscore attributes in .egads files in ocsmLoadFromEgads; force python garbage collection at end of each pyscript execution; add interactive testScript (detail)
    by jfdannen
  897. add PLOT_TESSSENS and PLOT_TEMPCOMPS flags to help in debugging tessellation sensitivities; remove tessellation velocity calculation shortcut to make Edge and Face tessellation velocities consistent; refactor signalError() and signalError2(); allow plotTypes =7 for x-component, =8 for y-component, =9 for z-component of sensitivity (detail)
    by jfdannen
  898. clarify description of SELECT x -1 ibody1 (detail)
    by jfdannen
  899. update to account for latest EGADS fix to EG_generalBoolean (detail)
    by jfdannen
  900. add ocsmRegBcstCB to ocsm.def (detail)
    by jfdannen
  901. update Building button to show progress of build in ESP; fix memory leak when ELEVATE command fails (like it often does in the combine.udc); extend SELECT command to SELECT all Faces/Edges/Nodes in current Body that match a Face in another Body; add SELECT NOT to SELECT the Faces/Edges/Nodes not selected and vice versa; fix bug associated with determining if an Edge is a subset of another; update to account for change in EG_isEquivalent; fix bug that did not copy attributes from an Edge in a WireBody that was INTERSECTed with a SolidBody to the new Edge; add PRINT_LAST_EGO compile-time flag to print the last ego after every step in an ocsmBuild; fix bug in sensCSM when trying to remove .csm or .cpc extension from the casename when it did not exist; extend SELECT command to SELECT all Faces/Edges/Nodes in current Body that are within another Body (detail)
    by jfdannen
  902. fix DUMP x.sens for degenerate Edges; add combine.udc so that old .csm scripts that used the (now deprecated) COMBINE command still work; add combine* test cases; add makeErep journal entry so that ereped can be tested; modify at-itype, at-nface, and at-nedge if there is an erep; add POWLE and POWTE arguments to udfDroop; add new droop* test cases; add udfNaca6mc to warp the input thickness distribution with the sum of multiple NACA 6-series meanlines; add naca6mc* test cases (detail)
    by jfdannen
  903. protect against string overflows in strncpy and strncat; fix mesgCallbackFromOpenCSM so that it does not try to broadcast text when in batch mode; initial version of udpNaca6mc (detail)
    by jfdannen
  904. Remove dependencies from file copies (detail)
    by haimes
  905. clean up usage of include files; update dependencies in Makefile and NMakefile (detail)
    by jfdannen
  906. remove pyscript from lint in serveESP.make (detail)
    by jfdannen
  907. update serveCSM.make to fix stanilizer error for pyscript (detail)
    by jfdannen
  908. another attempt to move building of pyscript from Makefile to serveESP.make (detail)
    by jfdannen
  909. move building of pyscript from Makefile to serveESP.make (detail)
    by jfdannen
  910. fix recently added bug in ereped that only allowed 9 colors; remove timHold from viewBodys.py; add batch flag to ESP structure; add assert command in browserToServer; add method of verifying ereped and plugs if running from journal and in -batch mode; next versions of udfDroop2 and udfDroop3; migrate testing in Makefile.DARWIN64 and Makefile.LINUX64 from serveCSM to serveESP; fix bug in esp.SetCaps() in pyESP (detail)
    by jfdannen
  911. next version of udfDroop2; first version of udfDroop3 (detail)
    by jfdannen
  912. next (still incomplete) version of udfDroop2 (detail)
    by jfdannen
  913. initial version of udfDroop2 (detail)
    by jfdannen
  914. fix test_pyOCSM to account for updated MESSAGE statement (detail)
    by jfdannen
  915. extend MESSAGE to optionally write to a file; modify message test case; update ESP-help and ESP_QuickReference (detail)
    by jfdannen
  916. fix memory leak when a UDF returns an error; remove extra prints when udfFlend or udfOffset detect an error; update sanitize targets in Makefile.LINUX (detail)
    by jfdannen
  917. allow OFFSET to function properly when the number of Edges in the offset is fewer than the original Body; fix escape-close-parenthesis in ESP_QuickReference; add ability to create periodic SPLINE in sketcher by using SSLOPE(0); add sslope6* test cases (detail)
    by jfdannen
  918. add assert in udfOffset to eliminate warnings on gcc (detail)
    by jfdannen
  919. fix bug that caused ereped to not work for a named Body; fix bug that added bar at end of file that was being editted in ESP; extend ereped so that it can be applied if there are multiple Bodys on the stack; add ereped8 test case; fix ESP hint associated with ELEVATE command; fix bug when SELECT EGDE with a bounding box was applied to a Body with degenerate Edges; add extractBodys test case; fix array bounds error in udpEqn2body; fix bug in ereped initializations for a single Body (detail)
    by jfdannen
  920. remove use of _scaleuv Attribute (detail)
    by jfdannen
  921. allow very long message to be sent from browser to server; add setCsmFile instead of setScmFileBeg/Mid/End; if error occurs when processing a timMesg, put the tim back into READY mode; post message when erep is successfully generated; implement udpEqn2body for SheetBodys; update frustrum3 test case; use __usedBodys__ attribute when computing velocity of Faces or Edges for RULE and BLEND; fix bug in sensCSM that did not reset maximum errors for Bodys when in -tess mode; fix big that did not copy .hasdots during RESTORE . (dot) (detail)
    by jfdannen
  922. update Makefile.LINUX64 (detail)
    by jfdannen
  923. add udfDumpPmtrs and associated test case; implement RESTORE .. (dot dot) to duplicate all Bodys (and Mark) back to the Mark and RESTORE ... (dot dot dot) to duplicate entire stack; add restore3 test case; allow UDF to not return a Body or Bodys; update udfOffset so that it can handle concave corners (but not case where Edges disappear) (detail)
    by jfdannen
  924. temporarily remove offset9* test cases (detail)
    by jfdannen
  925. update udfOffset for negative distance (detail)
    by jfdannen
  926. fix hint associated with JOIN; change JOIN so that it can make non-manifold WireBodys; modify numWireBody* test cases; create ELEVATE command, which only elevates WireBody to SheetBody and SheetBody to SolidBody;  remove COMBINE command and instruct user to use JOIN and ELEVATE instead; update UNION and JOIN such that if toMark is set but the operation fails, the stack is left unaltered; add unionSolids* test cases; fix typos in ESP-help (and OpenCSM.h) (detail)
    by jfdannen
  927. add (unneeded) initializations in udfOffset to resolve incorrect lint complaints (detail)
    by jfdannen
  928. implement udpEqn2body for WireBodys; modify inflatedBody2b to use the replicate.udc; implement udfOffset; create offset* test cases; improve error handling associated with SELECT SORT; modify flend5* test cases to use udfOffset (detail)
    by jfdannen
  929. uprev to v1.22 (detail)
    by jfdannen
  930. fix bug that did not update at-parameters for REORDER command; fix bug that changed the input Body to REORDER; fix sensitivity bug whan a RULE/BLEND xsect is RESTOREd after being used (detail)
    by jfdannen
  931. initialize *info in ocsmBodyDetails; return sensible error message when a SET is applied to a CONPMTR, CFGPMTR, or DESPMTR (detail)
    by jfdannen
  932. update duct7.vfy files (detail)
    by jfdannen
  933. return stub.py to expected state at beginning of tutorial6 (detail)
    by jfdannen
  934. add wingBEM2 test case; add duct7 test case; add replicate.udc and ereped6* and ereped7 test cases; add sharpFin test case; typo fix in documentation (detail)
    by jfdannen
  935. protect for degenerate Edges in sensCSM; fix ESP bug that dropped user out of CapsMode if a non-existant pyscript is attempted; update ESP_QuickReference (detail)
    by jfdannen
  936. update compare1b.vfy (detail)
    by jfdannen
  937. fix bug in computing tessellation sensitivities for a NodeBody (detail)
    by jfdannen
  938. try invEvaluateGuess for very hard cases in udfCompare; update compare1b test case (detail)
    by jfdannen
  939. fix bug in IDE that did not properly journal updates to the intent phrase (detail)
    by jfdannen
  940. second cut at tutorial6 write-up (detail)
    by jfdannen
  941. more documentation updates (detail)
    by jfdannen
  942. remove erroneous non-manifold warning associated with NodeBodys (detail)
    by jfdannen
  943. fix bug when visualizing new-style quads and .mixed=NULL; do not process _makeQuads on a Face if the Body has a _makeQuads Attribute (detail)
    by jfdannen
  944. fix bug in ESP.js that did not properly clear the display when velocities were cleared (detail)
    by jfdannen
  945. fix bug that did not persist Edge Attributes to new non-manifold Edges that are generated by EXTRACTing Faces; add attributeA test case; add duct6 test case (detail)
    by jfdannen
  946. fix bug in ESP.js associated with clearing velocities for a scalar; update tutorials 1 to 5 for v1.21 (detail)
    by jfdannen
  947. modify way python is initialized and finalized to work around a problem in numpy - take 2 (detail)
    by jfdannen
  948. modify way python is initialized and finalized to work around a problem in numpy (detail)
    by jfdannen
  949. copy CFGPMTRs and DESPMTRs from temporary CAPS MODL back into the ESP MODL in CapsCommit and CapsSuspend; automatically rebuild MODL in CapsCommit and CapsSuspend (detail)
    by jfdannen
  950. fix recently-added typo to timPyscript.c (detail)
    by jfdannen
  951. add sanitize-thread target to Makefile.DARWIN64 (detail)
    by jfdannen
  952. fix error message associated with not enough arguments to SPHERE; fix bug when user double-clicks in MessageWindow (Chrome and Safari) (detail)
    by jfdannen
  953. fix setting of PYTHONHOME for a double-quoted string (detail)
    by haimes
  954. generate WARNING if importing an .egads file that has an Attribute that cannot be evaluated (detail)
    by jfdannen
  955. remove debug print statement (detail)
    by jfdannen
  956. remove side effects from assert() statements, which work differently on Windoze (detail)
    by jfdannen
  957. allow pyscripts to end without a newline (detail)
    by jfdannen
  958. fix bug associated with finishing non-manifold WireBodys (detail)
    by jfdannen
  959. allow overlay to execute a mesg even when in TIM_EXECUTING; update tutorial6 files (detail)
    by jfdannen
  960. remove debug printing of long cast (detail)
    by jfdannen
  961. suppress profile printing if outLevel==0; fix filename updates in ESP after saving new file and after exporting the feature tree (detail)
    by jfdannen
  962. limit size of inflatedBody2a to reduce its CPU time (detail)
    by jfdannen
  963. add tutorial6/model2c (detail)
    by jfdannen
  964. numerous updates (detail)
    by jfdannen
  965. add sub03 and f104 to studentGallery (detail)
    by jfdannen
  966. remove try/catch from IDE demo pyscript files; use skeletonAIM instead of jfd3AIM in IDE demo; only show Display table entries (Node/Edge/Face/Csystem/Pips) if it contains any child entities; fix sensitivity bug associated with UDP/UDFs that requires finite differences coupled with an OUTPMTR that is tied to a mass property; add udpTest; initial commit of new timGloves and associated files (detail)
    by jfdannen
  967. add ocsmPrintProfile to explicitly print the profile of CPU usage (instead of printing automatically during ocsmBuild); automagically run pyscript.py when running in continuation mode; change Cvals via script when in CAPS mode; change DESPMTRs via script when in CAPS mode; offer to steal capsLock in CAPS mode; add ogive* test cases (detail)
    by jfdannen
  968. protect non-script caps_ calls with caps_debug; fix bug in timCapsMode that sometimes reverted to original .csm file; update demo_tim.txt; remove duplicate entries from ListHistory; fix typo in ESP-help associated with EVALUATE command (detail)
    by jfdannen
  969. remove -caps command-line option (replaced by timCapsMode); add cleanup process in pyscript.py only between scripts (not at end); fix bug that did not profile MESSAGE statements; reset profile info at beginning of ocsmBuild; fix bug that did not print OUTPMTRs during call to ocsmPrintPmtrs (detail)
    by jfdannen
  970. compile serveESP in Makefile and NMakefile (detail)
    by jfdannen
  971. inform user when CAPS overrides .csm value(s); first attemp at re-running pyscript in continuation mode (detail)
    by jfdannen
  972. add indication for Phases that are a predecessor of current Phase in ListPhases (detail)
    by jfdannen
  973. add calls to caps_debug around List* messages in timCapsMode; update data/ide/*.py to directly rebuild the geometry; reorder Caps menu options (detail)
    by jfdannen
  974. fix ListHistory in timCapsMode (detail)
    by jfdannen
  975. update demo_tim.txt (detail)
    by jfdannen
  976. modify demo_caps.txt and demo_tim.txt; make changes needed to make both demos operate properly (detail)
    by jfdannen
  977. fix stanalyzer error (detail)
    by jfdannen
  978. more modifications to support timCapsMode (detail)
    by jfdannen
  979. temporary commit to be used for debugging (detail)
    by jfdannen
  980. remove debug print statement (detail)
    by jfdannen
  981. additional bugs fixed in timCapsMode; add unequalRules test case to show how to RULE between xsects with different nnumber of Edges (detail)
    by jfdannen
  982. remove temporary printf statements (detail)
    by jfdannen
  983. rename capsIde to capsMode; restrict SPHEREs to have a positive radius; allow multiple ESP-help tabs in browser; partial implementation of timCapsMode (detail)
    by jfdannen
  984. revert previous commit (detail)
    by jfdannen
  985. fix previous commit (detail)
    by jfdannen
  986. remove unneeded windoze headers from tim.c (detail)
    by jfdannen
  987. Fix continuation marker in serveESP.mak (detail)
    by haimes
  988. Fix headers for Windows in timPyscript (detail)
    by haimes
  989. fix windoze problem with includes in pervious commit (detail)
    by jfdannen
  990. only allow one open ESP-help tab at a time; implement timFlowchart; modify interpolateUpper.py and conserveUpper.py to demonstrate flowcharting tool (detail)
    by jfdannen
  991. allow for .py scripts to run both in serveESP -caps and in python; add ocsmSetAuxPtr and ocsmGetAuxPtr in OpenCSM API (detail)
    by jfdannen
  992. fix stanalyzer problem in timCapsIde.c (detail)
    by jfdannen
  993. update serveESP.mak in previous commit to include timCapsIde.obj (detail)
    by jfdannen
  994. change display scaling so that if there is only one NodeBody it still gets displayed; initial implementation of timCapsIde (detail)
    by jfdannen
  995. allow nesting of TIMs to MAX_TIM_NESTING=10 (detail)
    by jfdannen
  996. fix bugs in File->Open and File->Edit for cases with and without UDCs (detail)
    by jfdannen
  997. fix bug in ocsmSave that did not write DIMENSION statements correctly when writing either a .csm or .cpc file with a variable nrow and/or ncol; update calls to caps_open to handle UDCs (detail)
    by jfdannen
  998. change -caps mode to accommodate both fore- and back-slashed in filenames; use ocsmTessellate in serveESP; update serveESP.make and serveESP.mak to define USING_CAPS (so that serveESP can be built without CAPS); remove unneeded code that generates a warning with new clang version; use updated caps_open so that cases with UDCs work properly (detail)
    by jfdannen
  999. remove unneeded code that generates a clang warning (detail)
    by jfdannen
  1000. add ocsmAdjustUDCs to OpenCSM API to copy all UDCs to the same directory as the .csm file; implement File->New, File->Open, and File-Edit->OK in caps mode (detail)
    by jfdannen
  1001. more improvements for ListHistory; use caps_open in read-only mode in ListPhases and ListHistory (detail)
    by jfdannen
  1002. do not let esp.UpdateESP rebuild (force rebuild in .py script) (detail)
    by jfdannen
  1003. extend ListHistory to GEOMETRYIN and GEOMETRYOUT (detail)
    by jfdannen
  1004. update Makefiles for cases without python; add many features to -caps mode; add data/ide/* to test -caps mode; fix many bugs in -caps mode; expose ocsmTessellate (detail)
    by jfdannen
  1005. Makefile updates to supress Python builds (detail)
    by haimes
  1006. first implementation of CAPS menu in ESP (detail)
    by jfdannen
  1007. allow branching of Phases when running serveESP in -caps mode (detail)
    by jfdannen
  1008. caps_PrintObjects signature changed (detail)
    by haimes
  1009. allow wild-carding (with 0) in SELECT ADD and SELECT SUB; update connect9a and connect9b; update Makefile.DARWIN64 for 3-way testing (detail)
    by jfdannen
  1010. in timViewer, use smoothing shading when looking at BOUNDS; allow wild-carding (with 0) in SELECT ADD and SELECT SUB; update Makefile.DARWIN64 for 3-way testing (detail)
    by jfdannen
  1011. add viewing of BOUNDS in timViewer; allow GetToken in tim.c to work if the text string does not end in a delimiter; improve error message generated when SKVAR does not contain triplets; improve CAPS summary at end if running in -caps mode (detail)
    by jfdannen
  1012. in timViewer, use a tessellation associated with the AIM if available, otherwise share the tessellation with OpenCSM (detail)
    by jfdannen
  1013. fix (long) cast in previous commit (detail)
    by jfdannen
  1014. extend STORE such that if index=-1, the first available index is used; fix bug that generated two copies of Bodys on stack when RESTOREing with index<0; if running serveESP in -caps mode, get MODL from CAPS (instead of building it in OpenCSM); extend timViewer to view Bodys associated with an AIM (detail)
    by jfdannen
  1015. fix bug that either hangs or seg faults serveESP if user closes browser while timPyscript is executing.  this is done by not calling Py_Finalize, which will result in a memory leak; fix bug that occasionally does not show pyscript file when serveESP is starterd with a .py file (detail)
    by jfdannen
  1016. improve error message when project.csm exists before the project directorry when running serveESP in -caps mode (detail)
    by jfdannen
  1017. improve the creation, editting, and removal of Caps Values in -caps mode; allow multi-valued Caps Values in ESP; add udfShadow and shadow* test cases (detail)
    by jfdannen
  1018. added numpts argument to udpKulfan, which helps avoid small dimples near the leading edge of a very thin section (detail)
    by jfdannen
  1019. add debug GRAFICs to udpKulfan (detail)
    by jfdannen
  1020. add SELECT LOOP to get Edges associated with a Loop in a Face; allow unary + or - in front of (multi-valued) Parameter when used alone in an expression; add sectionsWithHoles* test cases (detail)
    by jfdannen
  1021. create hollowSheet and hollowSolid test cases to show all possibile uses of HOLLOW command; improve description of HOLLOW in OpenCSM.h; if HOLLOW fails, input Body is left on the stack; add hollowE* test cases to show some of the limitations of HOLLOW; change timPython to timPyscript to get around problems with linking with python on Windoze; have OpenCSM return SUCCESS even when all the Bodys have been recycled; put note in ESP-help and OpenCSM.h that warns users that results from HOLLOW and SWEEP may be unpredicable due to OpenCASCADE issues; add timPlotter and plotter* test cases (detail)
    by jfdannen
  1022. fix bug in ocsmPrintEgo when called on BSPLINE Curve or Surface; require positive scale factors in udfNuscale when applied to a SolidBody; add initial version of timPlotter and test cases; change GetToken in tim.c so that tokens can have unlimited length (detail)
    by jfdannen
  1023. fix errors that occur because Py_Finalize cannot be used more than once (because of a numpy bug); fix bug that did not show Cvals for -caps runs in serveESP and Brchs when running without -caps (detail)
    by jfdannen
  1024. update Caps Value handling in ESP (detail)
    by jfdannen
  1025. do not show Branches in serveESP when in -caps mode; allow serveESP to change .csm file when in -caps mode; fix OpenCSM.c to remove stanalizer error (detail)
    by jfdannen
  1026. for a UDP/UDF, only use finite differences if one of its arguements is ATTRREAL and has non-zero dots (detail)
    by jfdannen
  1027. add growing3.py test case (detail)
    by jfdannen
  1028. modify timPython to get around numPy problems associated with Py_Finalize; modify tim interface to allow a tim to perform cleanup at the end of serveESP (detail)
    by jfdannen
  1029. fix tessellation sensitivity bug associated with SheetBodys that are INTERSECTed with a SolidBody; add designP5* test cases; fix Node sensitivity for two parallel Edges; move timViewer from Makefile to serveESP.make; add tufts for Nodes when displaying tessellation sesnitivities in serveESP; ensure that tessellation sensitivities on the boundaries of Face and ends of Edges agree with Edge and Node sensitivities; update .tsen files (detail)
    by jfdannen
  1030. remove serveESP from Makefile and NMakefile; create serveESP.make and serveESP.mak (detail)
    by jfdannen
  1031. index.lt.0 in RESTORE is now a wildcard, meaning that Bodys in all storages that match name are put onto the stack; initial integration of CAPS into serveESP (detail)
    by jfdannen
  1032. update ESP_QuickReference; update ESP so that double-clicking in MessageWindow takes you to filename:linenum that is clicked on, else takes you to last filename:linenum in MessageWindow; update sensCSM to use RMS errors; reduce ratio of errors for alerts from 5 to 2; update .gsen and .tsen files for 7.4.1 and 7.6.0 (detail)
    by jfdannen
  1033. fix ocsm.def for last commit (detail)
    by jfdannen
  1034. implement Debug in .csm editor; fix a few bugs in parent/child Body pointers (detail)
    by jfdannen
  1035. fix bugs associated with running a .py file (detail)
    by jfdannen
  1036. improve tessellation sensitivities for Edges and Faces that are not trimmed by a boolean operation; update .tsen files (detail)
    by jfdannen
  1037. update to special plotting associated with Face velocities for INTERP_VEL=6 (detail)
    by jfdannen
  1038. update CAPS/myPlane for intent 4 (avl) and 5 (bem) (detail)
    by jfdannen
  1039. .py files are automatically edited in serveESP (detail)
    by jfdannen
  1040. add quad3 and quad4 test cases (detail)
    by jfdannen
  1041. fix bug if user with ball loaded a new .csm file and then editted (where user without ball saw wrong file); adjust closeBody2 test case to REORDER the Edges so that all the Faces point outward; inform users if someone has joined or left a collaboration; modify visualization of grids on Faces in serveESP * new-style quads if _makeQuads attribute on Body (.tessType==Quad or .tessType==Mixed) * old-style quads if _makeQuads attribute on Faces (npatch>0) * triangles oherwise; fix valgrind error in sensCSM (detail)
    by jfdannen
  1042. check for proper result types from SWEEP; check mass props before topology in verification files; add verification data for OpenCASCADE 7.6.0; change copyright to 2022; give @version a value before the first Body is built; allow DIMENSIONed variable to be returned from a UDC; update expressions test case to demonstrate multi-value returns (detail)
    by jfdannen
  1043. more improvements to udfCompare (and fix sanitizer error); update GRAFIC plots of trim curves to show the points on the Pcurves; increase size of plot points in serveESP; add fixture* test cases (detail)
    by jfdannen
  1044. update Makefile.LINUX64; fix typo in mitten2.py (detail)
    by jfdannen
  1045. add ability of specifying color of items in a plotfile; change udfCompare to group bad points based upon the magnitude of the error; update udfCompare to check distances from Nodes and Edges as well as distances from Faces (detail)
    by jfdannen
  1046. update documentation for DUMP in OpenCSM.h (detail)
    by jfdannen
  1047. create ESP-viewer.js; pass callbacks to overlay if they exist; reorganize python test cases; change verification tests to include serveESP (detail)
    by jfdannen
  1048. update timViewer to be able to make changes to the scene graph; add ocsmLoadFromModel to pyOCSM; add shapes test case; fix initialization bug in ocsm.py (detail)
    by jfdannen
  1049. remove timViewModl from timPython.def (detail)
    by jfdannen
  1050. update test.py to remove call to removed esp.ViewModl() (detail)
    by jfdannen
  1051. add ability to hold python execution while an overlay (viewer) is executing; update viewer.py (detail)
    by jfdannen
  1052. change locking mechanism for tim_mesg to use ThreadWait instead of a mutex (detail)
    by jfdannen
  1053. fix bug that did not release the lock if tim_mesg is in holding mode (detail)
    by jfdannen
  1054. fix mutex problems associated with tim_mesg (detail)
    by jfdannen
  1055. fix lint error in tim.c (detail)
    by jfdannen
  1056. add timViewer and associated test cases; create mechanism to allow a TIM to call a TIM; fix a few typos in ESP-help (detail)
    by jfdannen
  1057. updates to Windoze .def files (detail)
    by jfdannen
  1058. Fix up ocsm.def to include GetToken (whose name should probably change) (detail)
    by haimes
  1059. Windoze tim.def file fix (detail)
    by jfdannen
  1060. Windoze tim.def file fix (detail)
    by jfdannen
  1061. Windoze ocsm.def file fix (detail)
    by jfdannen
  1062. fix bug in udfNuscale when zscale=0; first cut at calling a TIM from the python TIM (detail)
    by jfdannen
  1063. do not change outLevel if ocsmSetOutLevel is called with negative argument; add printout for outLevel.ge.2 when TIM broadcasts a message to the browsers; add option to plot trim curves associated with all Faces (detail)
    by jfdannen
  1064. fix Makefile and NMakefile associated with previous commit (detail)
    by jfdannen
  1065. reorganize way TIMs broadcast messages out to the browsers (detail)
    by jfdannen
  1066. use new BLEND C0 treatment, including in sensitivities; fix bug in timMitten associated with cleanup (detail)
    by jfdannen
  1067. add .tsen data for 7.3.1 (detail)
    by jfdannen
  1068. remove special sensitivity treatment for BLENDs with C0; update sensCSM verification data; add blend22* and rule22 test cases (detail)
    by jfdannen
  1069. add closeBody* test cases; add collab* test cases; add documentation about what happens for a 0 in either SELECT ADD or SELECT SUB statement (detail)
    by jfdannen
  1070. fix bug associated with MALLOCs in udpWaffle (detail)
    by jfdannen
  1071. fix bug associated with MALLOCs in udpWaffle (detail)
    by jfdannen
  1072. fix typo in error message associated with COMBINE command; make error messages from udpWaffle more explicit (detail)
    by jfdannen
  1073. remove Windoze warnings from previous commit (detail)
    by jfdannen
  1074. fix bug so that wv_broadcastText is not called by a TIM when running in batch mode (detail)
    by jfdannen
  1075. improve sensitivities associated with tip treatments in BLEND;  update designG5 and designG6 test cases (detail)
    by jfdannen
  1076. update timMesg so that it does not return a response; allow non-*host* to initiate file editting; fix bug that does not give appropriate error messages when having trouble opening a .py file from the command line; fix bug that does not give appropriate error messages when timPython has trouble opening a file from Tools->Python (detail)
    by jfdannen
  1077. add IFTHEN/ENDIF to udpWaffle; add waffleA* test cases; update Makefile.LINUX64; fix bug that lost ball if user with ball sends a message (detail)
    by jfdannen
  1078. update to latest version of Tblade3; allow default xaxis=0, yaxis=0, and zaxis=0 in ROTATEX, ROTATEY, and ROTATEZ; add rotate1 test case; add LAYOUT to udpWaffle; add waffle3* test case; fix memory leak associated with mprp arrays (detail)
    by jfdannen
  1079. missed designU1c.tsen in previous commit (detail)
    by jfdannen
  1080. remove tim_data from TIM interface (no longer needed); change NXSECT argument in udpGuide to ATTRREAL so that finite difference sensitivities are triggered; remove RAD argument to udpBox in designI2 and designI4 so that finite differences are not triggered; fix bug that re-computed velocities when re-computation was not necessary; fix bug associated with sensitivities of mass properties (detail)
    by jfdannen
  1081. update timPython to post stdout to the MessageWindow while python is executing; fix postMessage so that blanks lines between messages are eliminated (detail)
    by jfdannen
  1082. fix bug introduced in previous commit (detail)
    by jfdannen
  1083. fix bug in previous commit; add ocsmLoadFromModel function; add withTess=0 argument to DUMP command; add dumpTest* test cases; update Makefile.DARWIN64.gcc (detail)
    by jfdannen
  1084. updates to way PYTHONHOME is found in timPython; add designV1 test case; set sgFocus in timMitten so that it can start with an empty MODL (detail)
    by jfdannen
  1085. fix hint for SCALE in ESP; shorten hint time-out in ESP to 15 sec; fix bug in timPython that did not register MesgCB and SizeCB after a timLoad (which caused a problem if started with a .py file); add (not-yet-implemented) Debug option in ESP editor; update ESP editor so that users without the ball can see the edits as they happen; clean up unneeded routines in TIMs; add debug and debugged testcases; add designU* test cases (detail)
    by jfdannen
  1086. For timPython, put Python lib location in rpath (detail)
    by haimes
  1087. Build timPython on Windows (detail)
    by haimes
  1088. Allow for building TIMs outside of OpenCSM/src (detail)
    by haimes
  1089. fix bug that did not remove UDP cache entries when a Body was deleted (such as during recycling); do not consider DEGENERATE Edges when SELECTing either by bounding box of nearest-to (detail)
    by jfdannen
  1090. Dynamic Web Server library cleanup (detail)
    by haimes
  1091. update Makefile.DARWIN64 to get rpath correct when running a script directly in python (and not serveESP); allow CONPMTR statement if at top-level scope; update scope test case; fix bug that did not compute sensitivity correctly when a DESPMTR was used in an include-type UDC (detail)
    by jfdannen
  1092. change button to yellow and RunningPython while python is running; update Makefile.DARWIN64 to get rpath correct when running a script directly in python (and not serveESP) (detail)
    by jfdannen
  1093. fix pyOCSM test errors caused by addition of @scope (detail)
    by jfdannen
  1094. start getting ready for editing .py files; separate loading and running in timPython; run python in separate thread; add @scope at-parameter; add scope test case (detail)
    by jfdannen
  1095. add esp.h (detail)
    by jfdannen
  1096. fix stdout sequencing in timPython; get rid of global data in serveESP; update data/python/test* files (detail)
    by jfdannen
  1097. fix bug associated with (FD) sensitivities for a MODL with a OUTPMTR being set before a FILLET or CHAMFER; remove code that protects against calls to EG_replaceFaces in SolidBodys with more than one Shell (detail)
    by jfdannen
  1098. enable esp.SetModl() to see MODL in serveESP after python finishes (detail)
    by jfdannen
  1099. stub routines added to account for change in tim.def (detail)
    by jfdannen
  1100. fix bug associated with expressions that contain mass properties; add designT1 test case; fix bug that causes an error to be raised if the mass property sensitivities are computed by FDs before the last Body is built; add designT2 test case; add python mode to CodeMirror; add esp.py (detail)
    by jfdannen
  1101. add udpTire testing to Makefile.DARWIN64; compute sensitivity correctly with udfCreateBEM, udfCreatePoly, udfEditAttr, udfPrintBbox, udfPrintBrep, and udoPrintEgo; add designS3 test case (detail)
    by jfdannen
  1102. fix bug in udfGuide that did not work properly for an input SheetBody; add designS* test cases; fix bug that did not compute sensitivities correctly for UDFs when one (or more) of the input Bodys had non-zero velocities (detail)
    by jfdannen
  1103. add udpBodyList to udp.def for Windoze (detail)
    by jfdannen
  1104. initial code for proper UDF sensitivity calculations --- not enabled yet (detail)
    by jfdannen
  1105. modify udfNacelle* test cases to use DESPMTRs; add splitWing* test cases; remove gallery/FJ2 from distribution (detail)
    by jfdannen
  1106. allow pyOCSM to import an externally-generated MODL; enable timMitten; create timPython and data/python/test*; allow serveESP to start with a .py file (detail)
    by jfdannen
  1107. uprev to v1.21 (ESP.html, ESP-localhost.html, ESP-help.html, OpenCSM.h, ocsm.rc); create unpublished routine convertToBSplines.  modify so that BSPLINES are not reconverted; modify udpParabaloid and udfNuscale to use convertToBSplines.  add DEBUG prints in udpNuscale; add sculpt* test cases; add attrProp test case to show how Edge Attributes get propagated to Faces by EXTRUDE and REVOLVE but not by RULE and BLEND.  attrProp also shows that Edge Attributes are not carried forward by EXTRUDE, REVOLVE, RULE, or BLEND; make INTERFACE DIM obsolete; issue WARNING to use DIMENSION statement instead; add udfNacelle and udfNacelle* test cases (detail)
    by jfdannen
  1108. fix bug in StepThru that was introduced when computation of _tParams was delayed (detail)
    by jfdannen
  1109. fix minor documentation typos (detail)
    by jfdannen
  1110. fix bug in JOIN associated with Faces that share Edges but which have bounding boxes that differ; add halfSpheres test case; remove spurious printout associated with SKEND command; disable timMitten for v1.20 release (detail)
    by jfdannen
  1111. fix bug that did not allow a user to EXTRACT multiple Faces from a SolidBody that had an internal hole; add extractShells* test cases; fix memory leak in udpParabaloid; update ESP_QuickReference for v1.20 (detail)
    by jfdannen
  1112. add attrScribe test case; add udpParabaloid and test case (detail)
    by jfdannen
  1113. implement outLevel in timPlugs; improve -plugs option in serveCSM so that more cases work; mark plugs4c as successful in Jenkins; modify attribute and getattr1 test cases to account for fact that _tParams only exists when Body is recycled (detail)
    by jfdannen
  1114. fix long delay when browser without ball syncs display (detail)
    by jfdannen
  1115. remove inside-out test for SolidBodys to improve performance; move Plugs to a TIM in serveESP; do not add _tParams attribute unless the Body will be tessellated; remove coarseBox test case (detail)
    by jfdannen
  1116. remove print in tim.c to eliminate Windoze warning (detail)
    by jfdannen
  1117. remove unistd.h from timMitten.c (detail)
    by jfdannen
  1118. fix bug that sometimes uses FD sensitivities when analytic derivatives could be used instead (associated with UDPARG statements); change method for setting mass properties so that rebuild is not needed when changing spectrum limits in ESP (detail)
    by jfdannen
  1119. another attempt to fix Makefiles (detail)
    by jfdannen
  1120. another attempt to fix Makefiles (detail)
    by jfdannen
  1121. another attempt to fix Makefiles (detail)
    by jfdannen
  1122. another attempt to fix Makefiles (detail)
    by jfdannen
  1123. another attempt to fix Makefiles (detail)
    by jfdannen
  1124. another attempt to fix Makefiles (detail)
    by jfdannen
  1125. another attempt to fix Makefiles (detail)
    by jfdannen
  1126. another attempt to fix Makefiles (detail)
    by jfdannen
  1127. fix Makefiles for latest commits (detail)
    by jfdannen
  1128. apply attributes on LINSEG, ARC, CIRARC, BEZIER, SPLINE, and SSLOPE Branches to the Edge that they create; add attrSketch* test cases; remove Gloves and ErepEd from serveCSM; next version of serveESP that uses TIMs; move ErepEd to a TIM in serveESP; move Gloves to a TIM in serveESP; create Mitten as a TIM example (detail)
    by jfdannen
  1129. Small fix for IGES Name reads (detail)
    by galbramc
  1130. IGES reader now also reads all Name attributes. Fix stanalizer warning. (detail)
    by galbramc
  1131. Reduce time extract Name attribute from STEP files. (detail)
    by galbramc
  1132. Track STEP/IGES name attributes through all read manipulations (detail)
    by galbramc
  1133. Lint fix (detail)
    by galbramc
  1134. Use python or python3 executables in makeEnv (detail)
    by galbramc
  1135. Fixes for Edge only tessellations (detail)
    by galbramc
  1136. Undo Makefile change (detail)
    by galbramc
  1137. One more adjustment to EG_mapBody (detail)
    by galbramc
  1138. Only delete EG_mapBody mapped upen error if copied (detail)
    by galbramc
  1139. Uprev to ESP 1.24. Add .C1side attribute for EG_blend. EG_blend now supports three neighboring C1 sections. (detail)
    by galbramc
  1140. makeEnv fixes for -dev (detail)
    by galbramc
  1141. makeEnv fix AFLR_ARCH for linux-aarch64. Add -dev option to makeEnv. (detail)
    by galbramc
  1142. Add note about fighter4 on Intel macOS 13.3 (detail)
    by galbramc
  1143. Fix step and iges label read (detail)
    by galbramc
  1144. Update concepts and viewer pdf. Fix for makeEnv. (detail)
    by galbramc
  1145. Updates for ESP 1.23 release. Add LINUX_AARCH64 and DARWIN_ARM64 ESP_ARCH. (detail)
    by galbramc
  1146. Fix bug in setup scripts (detail)
    by galbramc
  1147. Fix bug in setup scripts (detail)
    by galbramc
  1148. Update README files. Add PreBuilt setup scripts. (detail)
    by galbramc
  1149. Fix last commit (detail)
    by galbramc
  1150. Lint fixes (detail)
    by galbramc
  1151. Fix stanalizer warning (detail)
    by galbramc
  1152. Fix warning (detail)
    by galbramc
  1153. Fix EG_mapTessBody for DEGENERATE Edges. Update makeEnv to look for python3. Readme updates. (detail)
    by galbramc
  1154. Increase thread stack size on macOS (detail)
    by galbramc
  1155. Fix warning (detail)
    by galbramc
  1156. Lint fix (detail)
    by galbramc
  1157. Fix lite stanalizer warning (detail)
    by galbramc
  1158. Fix individual bodies in EG_generalBooelean. Other small cleanup. (detail)
    by galbramc
  1159. Fix EG_getTopology instantiation (detail)
    by galbramc
  1160. Add Surreal EG_getTopology (detail)
    by galbramc
  1161. Fix ShapeFix for generalBoolean (detail)
    by galbramc
  1162. Add more documentation on EGADS parent child referencing (detail)
    by galbramc
  1163. Export EG_rotate_dot on Windoze (detail)
    by galbramc
  1164. Track sensitvities with EG_repalceFaces (detail)
    by galbramc
  1165. Add Surreal EG_makeTopology (detail)
    by galbramc
  1166. Use ffp-model=strict on M1. Relax some test tolerances for M1. (detail)
    by galbramc
  1167. Fix clang 14.0.3 warnings (detail)
    by galbramc
  1168. Update EGADS doc for makeTessBody with negative legnth (detail)
    by galbramc
  1169. Try fixing bodies in generalBoolean (detail)
    by galbramc
  1170. Fix error message. Do not change topObj for bodies. Why does this not work... (detail)
    by galbramc
  1171. Correctly set topObj for Geometry in Bodies. Set topObj for bodies in Models. Use EG_removeCntxtRef in makeFace. Check Body references before deleting a Model. More robust cleanup in EG_close. (detail)
    by galbramc
  1172. Fix getEdgeUV doc (detail)
    by galbramc
  1173. Fix full attirubtion for EG_repalceFaces. Fix error message. (detail)
    by galbramc
  1174. Remove depricated x86 -m64 compiler flag. Add compiler flags for OCC 7.7. (detail)
    by galbramc
  1175. Fix for OCC 7.4 (detail)
    by galbramc
  1176. Provide error message instead of segfault in EG_otherCurve (detail)
    by galbramc
  1177. Add 1-bias to matchBody documentation (detail)
    by galbramc
  1178. update return values from udpTire (detail)
    by jfdannen
  1179. Suppport Edge only eto files (detail)
    by galbramc
  1180. update DARWIN64.gcc to add comma to RPATH needed by some gcc-10 compilers (detail)
    by jfdannen
  1181. Add back ESP_ROOT/lib to rpath on DARWIN (detail)
    by galbramc
  1182. Use @loader_path for rpath to ESP_ROOT/lib on DARWIN (detail)
    by galbramc
  1183. Update Copyright date (detail)
    by galbramc
  1184. Uprev to 1.23 (detail)
    by galbramc
  1185. README release notes updates (detail)
    by galbramc
  1186. Rev updates to 1.22 (detail)
    by galbramc
  1187. README updates (detail)
    by galbramc
  1188. Update makeEnv for macOS 13 (detail)
    by galbramc
  1189. Replace DEBUG sprintf with snprintf (detail)
    by galbramc
  1190. Try again: reorder includes! (detail)
    by haimes
  1191. Try again: MSVC 2022 seems to have snprintf defined! (detail)
    by haimes
  1192. sprintf -> snprintf mods (detail)
    by haimes
  1193. Replace sprintf with snprintf in egadsTopo (detail)
    by galbramc
  1194. Suppress clang deprication warning of sprintf in OCC (detail)
    by galbramc
  1195. Add simple figure for tri ordering with mixed quad faces (detail)
    by galbramc
  1196. Allow unconverged SmoothUV status to continue during parameterization (detail)
    by haimes
  1197. Fix the new isEquivalent for periodic curves split into 2 Edges (detail)
    by haimes
  1198. modified Ints to Int32 and added egadslite tests (detail)
    by docampo
  1199. recompiled pdf references were with ?? (detail)
    by docampo
  1200. removed EL flag from some of the effectiveTopology functions (detail)
    by docampo
  1201. fixed typos (detail)
    by docampo
  1202. Remove bug that would error out if there were no Faces during generalBoolean operations (detail)
    by haimes
  1203. Update isEquivalent to fix previous problem (detail)
    by haimes
  1204. Allow for senses to be flipped when applying EG_isEquivalent (detail)
    by haimes
  1205. added the ego. wrap to the getfield operation (detail)
    by docampo
  1206. update udpTire for new include scheme (detail)
    by jfdannen
  1207. Fix Edge mapping problem introduced since Rev 1.21 (detail)
    by haimes
  1208. changed .obj -> .ego (detail)
    by docampo
  1209. Add TOML to egadslite dep (detail)
    by galbramc
  1210. compiling for Julia 1.6 and 1.8. test fails for 1.8 (detail)
    by docampo
  1211. Update makeEnv to reflect newer MAC OS revs (detail)
    by haimes
  1212. Add the Julia interface to the EGADS API documentation (detail)
    by haimes
  1213. Try to fix stanalyzer errors again (detail)
    by haimes
  1214. Fix jlEGADS makefiles (detail)
    by galbramc
  1215. Try to fix stanalyzer errors (detail)
    by haimes
  1216. Suppress gcc-12 warning (detail)
    by galbramc
  1217. Effective Topology: apply last change only for EFaces with more than 1 Face (detail)
    by haimes
  1218. Effective Topology: check result of getEdgeUV against invEval and pick the closer (detail)
    by haimes
  1219. A different possible fix for the MemcheckOcsm on the rule28 cases (detail)
    by haimes
  1220. A different possible fix for the MemcheckOcsm on the rule28 cases (detail)
    by haimes
  1221. A possible fix for the MemcheckOcsm on the rule28 cases (detail)
    by haimes
  1222. Effective Topology: Mark Planar/Periodic EFaces not to tessellate Edges based on Face Curvature (detail)
    by haimes
  1223. Fix scan-build warning from last commit again (detail)
    by haimes
  1224. Fix scan-build warning from last commit (detail)
    by haimes
  1225. Effective Topology: Fix NM Sheetbody Node removal (detail)
    by haimes
  1226. Fix NULL bays at end with multiNode Rule (detail)
    by haimes
  1227. Updated ruled sensitvities for multiNode (detail)
    by galbramc
  1228. A minor update of the documentation of EG_approximate (detail)
    by haimes
  1229. Update the docs to specify the additions to EG_approximate and EG_ruled (detail)
    by haimes
  1230. Fix _close! function to properly check garbage collection for both egads and egadslite (detail)
    by galbramc
  1231. Fix jlEGADS makefiles for zsh (detail)
    by galbramc
  1232. jlEGADS makefile adjusments. Other small cleanup. (detail)
    by galbramc
  1233. delete manifest from lite (detail)
    by docampo
  1234. now ?? (detail)
    by docampo
  1235. egads also used from egadscommon.jl dependencies (detail)
    by docampo
  1236. remove unnecesary ENVS (detail)
    by docampo
  1237. now with actually things inside (detail)
    by docampo
  1238. created egads common folders (detail)
    by docampo
  1239. Rule with Loops of differing number of Edges passes simple test with null 'bay' (detail)
    by haimes
  1240. Can rule with sections of different number of Edges -- still need to check null bays, multiplicity > 1, curved EndCaps & EG_splineGeom_dot (detail)
    by haimes
  1241. Close memory leak in EGADSlite associated with full attributes (detail)
    by haimes
  1242. Fix scan-build problem (detail)
    by haimes
  1243. Fix warning from last commit (detail)
    by haimes
  1244. Second (but incomplete) cut at Rule with differring numbers of Edges (detail)
    by haimes
  1245. Another minor correction to last commit (detail)
    by haimes
  1246. Minor correction to last commit (detail)
    by haimes
  1247. First (but incomplete) cut at Rule with differring numbers of Edges (detail)
    by haimes
  1248. Don't allow for Figure 8 Nodes in ELoops (for now) (detail)
    by haimes
  1249. Another def file fix (detail)
    by haimes
  1250. Add setTessParam to lite def file (detail)
    by haimes
  1251. Updates to egadslite to support pyEGADS.egadslite (detail)
    by galbramc
  1252. First cut at pyEGADS.egadslite (detail)
    by galbramc
  1253. Remove manifest files for jlEGADS. Check array size for makeGeometry. Fix makeGeometry tests. Some references fixes. (detail)
    by galbramc
  1254. Fix some pyEGADS refrencing. Check data length for pyEGADS makeGeometry. (detail)
    by galbramc
  1255. Fix topObj during EGADSlite import (detail)
    by haimes
  1256. Add U periodic options to EG_approximate for surfaces (detail)
    by haimes
  1257. try (detail)
    by docampo
  1258. Allow for full attribution in EGADSlite (detail)
    by haimes
  1259. Add reference counting for jlEGADS finalizers. Lots of other jlEGADS cleanup. (detail)
    by galbramc
  1260. Fix for last commit (detail)
    by galbramc
  1261. Various Julia cleanup and fixes (detail)
    by galbramc
  1262. Update julia Makefile (detail)
    by galbramc
  1263. Remove jlEGADS environment variable (detail)
    by galbramc
  1264. added package install (detail)
    by docampo
  1265. added Makefile (detail)
    by docampo
  1266. first jlEGADS (detail)
    by docampo
  1267. First cut at fitting periodic curves (detail)
    by haimes
  1268. Fix a number of bugs in the Effective Topology (detail)
    by haimes
  1269. Uprev EGADS (detail)
    by haimes
  1270. Forgot DARWIN64.clang and DARWIN64.gcc (detail)
    by galbramc
  1271. Move DARWIN64 ifort link flag to support EGADS test builds (detail)
    by galbramc
  1272. Fix for ifort on newer versions of macOS (detail)
    by galbramc
  1273. Add _USE_MATH_DEFINES for MSVC (detail)
    by galbramc
  1274. Add error functions erf and erfc to Surreal (detail)
    by galbramc
  1275. README update (detail)
    by haimes
  1276. Config update (detail)
    by haimes
  1277. Fix bug returning wrong parameters in pyEGADS effectiveMap (detail)
    by galbramc
  1278. More defensive Surreal defines (detail)
    by galbramc
  1279. Some config updates (detail)
    by haimes
  1280. Fix up EMP_ThreadDestroy for the M1 (detail)
    by haimes
  1281. Stanalizer fixes for Lazy Surreal (detail)
    by galbramc
  1282. Use std c++11 for Surreal tests. Fix in depricated EG_loadTess. (detail)
    by galbramc
  1283. Use Lazy Expressions for Surreal for slightly better performance on windoze (detail)
    by galbramc
  1284. Minor config changes (detail)
    by haimes
  1285. Config change for Windows to always start browsers in the background (detail)
    by haimes
  1286. Windows configuration change to promote Edge (detail)
    by haimes
  1287. update README.txt with note about Safari block-ups (detail)
    by jfdannen
  1288. Add makeNmWireBody to pyEGADS (detail)
    by galbramc
  1289. Don't clobber LD_LIBRARY_PATH with ESPenv (detail)
    by galbramc
  1290. Configuration changes and signature change for EG_makeNmWireBody (detail)
    by haimes
  1291. Documentation updates (detail)
    by haimes
  1292. More Doc updates (detail)
    by haimes
  1293. Some Documentation updates (detail)
    by haimes
  1294. Fix the fix for memory issue with getting units from imports (detail)
    by haimes
  1295. Fix memory issue with getting units from imports (detail)
    by haimes
  1296. Document some of the new updates to SETP/IGES handling (detail)
    by haimes
  1297. Support units on both STEP and IGES exports (detail)
    by haimes
  1298. Add an option to do less checking with makeTopology on a Loop (detail)
    by haimes
  1299. Another touch of splitPeriodics (detail)
    by haimes
  1300. Try that again -- revert and get the if statement correct! (detail)
    by haimes
  1301. Try that again (detail)
    by haimes
  1302. Don't update the shape in splitPeriodics if it fails curve simplification (detail)
    by haimes
  1303. Fix scan-build warning from last commit (detail)
    by haimes
  1304. Implement EG_makeNMWireBody (detail)
    by haimes
  1305. Straighten out non-manifold WireBodies (detail)
    by haimes
  1306. Supress informational message on initial triangulation problem with Planar Faces (detail)
    by haimes
  1307. Guard against infinite loop on planar surfaces with bad initial triangulation (detail)
    by haimes
  1308. More support for tessellations without face tessellations (detail)
    by galbramc
  1309. Enable EG_finishTess to fill in missing face tessellation. (detail)
    by galbramc
  1310. Remove warnings generated by a new compiler (detail)
    by haimes
  1311. Config change (detail)
    by haimes
  1312. Explicitly open files as bindary in EG_saveTess/EG_loadTess. (detail)
    by galbramc
  1313. Effective Topology: fix memory problem with interior Edge (in Loop twice) (detail)
    by haimes
  1314. Remove Degenerate EEdges once Faces are merged in an EFace (detail)
    by haimes
  1315. Documentation updates (detail)
    by haimes
  1316. Only consider Python 3.8 or newer in makeEnv/winEnv (detail)
    by galbramc
  1317. Some config updates (detail)
    by haimes
  1318. Export Body CSystems that ar free-standing (aLen = 9) (detail)
    by haimes
  1319. Update egads_dot.h. Explicit makefile in scan-build/scan-view. (detail)
    by galbramc
  1320. change startup messages in wvServer from stderr to stdout (detail)
    by jfdannen
  1321. Add missing DEGENERATE Edge check to EG_exportModel (detail)
    by galbramc
  1322. Properly reflect the move of OCC copies in this repository (detail)
    by haimes
  1323. Fix array out-of-bounds in EG_extrude_dot (detail)
    by galbramc
  1324. When splitting periodic Faces convert the order 1 BSpline to a Line; allow for calling wv_cleanupServers when there are active server threads (detail)
    by haimes
  1325. Don't fix Faces for EG_makeTopology(SOLIDBODY) (detail)
    by galbramc
  1326. Fix warning (detail)
    by galbramc
  1327. Makefile fixes (detail)
    by galbramc
  1328. Add EG_rotate_dot and fix EG_extrude_dot to work with OCC. Fix for topological changes in EG_rotate (not enabled yet). (detail)
    by galbramc
  1329. Do not use Edge tangents for vertex insertion when the magnitude is deminishing (near C0s) (detail)
    by haimes
  1330. Though premature, update the copyright year (detail)
    by haimes
  1331. Attempt to mitigate the fillTris error when presented with bad PCurves (detail)
    by haimes
  1332. Use the define OCC_VERSION_DEVELOPMENT to tell us we built the OpenCASCADE (detail)
    by haimes
  1333. Some trianglulation changes needed to deal with the GMGW3 'foreign' STEP files (detail)
    by haimes
  1334. Another config update and another update for Windows threading (detail)
    by haimes
  1335. Start FireFox in the background & try to fix stanalizer again (detail)
    by haimes
  1336. Try to fix a scan-build error that spuriously popped up! (detail)
    by haimes
  1337. Protect EMP against NULL Locks and revert Safari's startup in makeEnv (detail)
    by haimes
  1338. Windows config update and fix for EMP_LockTest for Windows (detail)
    by haimes
  1339. Fix arcLength (EGADSlite) for BSplines and update some configure scripts (detail)
    by haimes
  1340. Fix bugs in EG_arcLenSeg (detail)
    by galbramc
  1341. Add MCG_ARCLEN for suggested arclen approach. Add some more quadrature options for arclen. (detail)
    by galbramc
  1342. Temp brute-force fix for BSpline arcLength in EGADSlite; fix tessellation progress warning; config updates -- list XQuartz min rev (detail)
    by haimes
  1343. Fix recent update to EGADSlite arcLength code (detail)
    by haimes
  1344. Fix the flattening of periodic BSplines when exporting to EGADSlite; Fix the BSPline range in EGADSlite when flattened (detail)
    by haimes
  1345. Fix STEP writing with Name attributes (detail)
    by haimes
  1346. Mark invalid Bodies during STEP/IGES reads & limit number of inserted verts when tessellating (detail)
    by haimes
  1347. Add MSVC 2022 config file (detail)
    by galbramc
  1348. C0 Blend fix so that the surface derivatives (normals) do not vanish at the C0 (detail)
    by haimes
  1349. Scan-build fix from last commit (detail)
    by haimes
  1350. Functions that insert verts based on surface arc-length use underlying Face when all positions are on that Face (Effective Topology). Used in Quadding & HO tessellations. (detail)
    by haimes
  1351. Improved error message. Use brep V2 for OCC 7.6. Minor cleanup. (detail)
    by galbramc
  1352. Minor cleanup (detail)
    by galbramc
  1353. Fix blend tip sensitvities (detail)
    by galbramc
  1354. clang analyzer fixes (detail)
    by galbramc
  1355. Fix so DEBUG code compiles (detail)
    by galbramc
  1356. Allow degenerate Edge in blend/ruled sections (detail)
    by galbramc
  1357. Fix Blend with non-planar sections and Degerenate Edges in the Sections (detail)
    by haimes
  1358. Target arm64 darwin, not specifically macOS 11 (detail)
    by galbramc
  1359. Reduce testing output (detail)
    by galbramc
  1360. Cleanup old config files (detail)
    by haimes
  1361. No longer support OCC less than Rev 7.0 (detail)
    by haimes
  1362. Changes to support OCC 7.6 (detail)
    by haimes
  1363. Update Makefiles for OCC 7.6. Improved error message. (detail)
    by galbramc
  1364. Other Python config updates (detail)
    by haimes
  1365. Dynamic Web Server library cleanup (detail)
    by haimes
  1366. Fix the new wvServer dynamic library def file (detail)
    by haimes
  1367. NMakefile fix (detail)
    by haimes
  1368. Make the WV server library dynamic (detail)
    by haimes
  1369. Allow for passing a user pointer into browserMessage -- breaks compatibility! (detail)
    by haimes
  1370. minor updates (detail)
    by haimes
  1371. update udpTire.c (detail)
    by jfdannen
  1372. Allow for Solids with multiple Shells to work in replaceFaces (detail)
    by haimes
  1373. update udpTire.c (detail)
    by jfdannen
  1374. update udpTire.c for change in cacheUdp (detail)
    by jfdannen
  1375. Retain all Topology labeled as internal but reject external -- keep Nodes that have a non-zero valence (detail)
    by haimes
  1376. Revert Internal Node change -- needs more work! (detail)
    by haimes
  1377. An update to the last commit -- remove only Nodes that do not touch active Edges (detail)
    by haimes
  1378. Retain Internal Nodes during parsing -- THIS HAS THE POTENTAL OF BREAKING EGADS FILE READS FOR THE VERY FEW CASES THIS COMES UP (the result is that attributes are not reassigned) (detail)
    by haimes
  1379. scan-build suppression (detail)
    by galbramc
  1380. Use jenkins setup for scan-build instead (detail)
    by galbramc
  1381. Removed one too many (detail)
    by galbramc
  1382. Another M1 fix (detail)
    by galbramc
  1383. Fix last commit (detail)
    by galbramc
  1384. Remove depreacted OCC defines. Fix for M1 scan-build. (detail)
    by galbramc
  1385. Enable scan-build on M1 (detail)
    by galbramc
  1386. Fix analyzer error (detail)
    by haimes
  1387. UpRev to 1.21 and deal with Names on STEP IO (detail)
    by haimes
  1388. README updates (detail)
    by haimes
  1389. Remark on a fix to pyEGADS (detail)
    by galbramc
  1390. Fix memory problem in patch tester (detail)
    by haimes
  1391. Fix last warnings (detail)
    by haimes
  1392. First cut at the Tessellation support for the new AVL; some configuration updates (detail)
    by haimes
  1393. update config/README.txt for v1.20 (detail)
    by jfdannen
  1394. Append ESPFLIBS on M1 (detail)
    by galbramc
  1395. Remove OCC 6.8 from config files. Explicitly build arm64 with DARWINM1 (detail)
    by galbramc
  1396. Remove MSVC 2015 as approved compiler (detail)
    by haimes
  1397. Check environment variables (detail)
    by galbramc
  1398. AFLR M1 config changes (detail)
    by haimes
  1399. Configure updates in support of Rev 1.20 (detail)
    by haimes
  1400. Allow for server to post messages to browserMessage (detail)
    by haimes
  1401. Add missing files to clean target (detail)
    by galbramc
  1402. Create possibly missing tess2d structure in EG_setTessFace (detail)
    by galbramc
  1403. Document secure transport for wvServer (detail)
    by haimes
  1404. Update vsp3 memcheck suppression (detail)
    by galbramc
  1405. Add refine executable PATH (detail)
    by galbramc
  1406. Suppress vspscript leaks (detail)
    by galbramc
  1407. Add data/vsp3/X57_Maxwell_CRM_v4.4.1.csm to csmIgnore for valgrind. (detail)
    by galbramc
  1408. Downgrade to OpenVSP 3.34.0 (detail)
    by galbramc
  1409. Add vsp3 jenkins files (detail)
    by galbramc
  1410. Add VSP3_ROOT for vsp3 testing (detail)
    by galbramc
  1411. Add fighter4 as known error on macys (detail)
    by galbramc
  1412. Upgrade to AFLR 11.5.9 (detail)
    by galbramc
  1413. Update to AFLR 11.5.8 (detail)
    by galbramc
  1414. Update xfoil executables with up to 2048 panels (detail)
    by galbramc
  1415. Python suppressoin (detail)
    by galbramc
  1416. Update parser (detail)
    by galbramc
  1417. Another prebuilt fix (detail)
    by galbramc
  1418. Fix PreBuilt script (detail)
    by galbramc
  1419. Update PreBuilt testing (detail)
    by galbramc
  1420. Update ESPbfr.tgz (detail)
    by galbramc
  1421. Add OCC7.7 valgrind suppressions (detail)
    by galbramc
  1422. Fix for jenkins script (detail)
    by galbramc
  1423. Upgrade to SU2 7.5.1 (detail)
    by galbramc
  1424. Uprade to AFRL 11.4.5 (detail)
    by galbramc
  1425. Update clang sanitizer path (detail)
    by galbramc
  1426. update so that more flend8* test cases are expected to pass (detail)
    by jfdannen
  1427. update so that more flend8* test cases are expected to pass (detail)
    by jfdannen
  1428. update expected flend8* failures (detail)
    by jfdannen
  1429. Put file names first (detail)
    by galbramc
  1430. Add OCC 7.7 Jenkins data (detail)
    by galbramc
  1431. add expected errors selected in flend8* test cases (detail)
    by jfdannen
  1432. Cart3D env fix (detail)
    by galbramc
  1433. Upgrade Cart3D version (detail)
    by galbramc
  1434. Update for OCC 7.7.0 (detail)
    by galbramc
  1435. Upgrade to AFLR 11.3.17 (detail)
    by galbramc
  1436. numpy memory leak suppression (detail)
    by galbramc
  1437. Upgrade to AFLR 11.3.15 (detail)
    by galbramc
  1438. Add NETCDFINC for DARWIN64.gcc testing. (detail)
    by galbramc
  1439. Don't build AFLR with Beta testing (detail)
    by galbramc
  1440. Another exodus suppression (detail)
    by galbramc
  1441. Suppresse NETCDF/HDF5 memory leaks (detail)
    by galbramc
  1442. Upgrade to SU2 7.4.0 (detail)
    by galbramc
  1443. More general ubuntu suppression (detail)
    by galbramc
  1444. Ubuntu valgrid supression (detail)
    by galbramc
  1445. scipy 1.9.2. and 1.9.3 have valgrind issues (detail)
    by galbramc
  1446. Add seacas to macys (detail)
    by galbramc
  1447. Add SEACAS environment variable for exodus (detail)
    by galbramc
  1448. Upgrade cvxopt build for gcc 12 on viggen (detail)
    by galbramc
  1449. Suppress scipy memory leak (detail)
    by galbramc
  1450. Another python valgrind suppression (detail)
    by galbramc
  1451. Add Ubuntu 22.04 valgrind suppressions (detail)
    by galbramc
  1452. Use system valgrind (detail)
    by galbramc
  1453. Small cleanup of email template (detail)
    by galbramc
  1454. Remove torch for now (detail)
    by galbramc
  1455. Log parser fixes (detail)
    by galbramc
  1456. Suppress torch memory leaks (detail)
    by galbramc
  1457. Upgrade sanitizer path to 14.0.0 (detail)
    by galbramc
  1458. Try dissabling CUDA for pytorch (detail)
    by galbramc
  1459. Look for fatal msvc errors (detail)
    by galbramc
  1460. Look for fatal gnu/clang errors (detail)
    by galbramc
  1461. Revert to serveCSM for plugs (detail)
    by galbramc
  1462. Update lingering serveCSM to serveESP (detail)
    by galbramc
  1463. Very strange... (detail)
    by galbramc
  1464. Allow multiple csm patterns (detail)
    by galbramc
  1465. Only check error handling when running all csm files (detail)
    by galbramc
  1466. Support changing outLevel and running select files (detail)
    by galbramc
  1467. Don't do jlEGADS testing just yet (detail)
    by galbramc
  1468. Revert ESP_venv for ESP_Beta (detail)
    by galbramc
  1469. Move virtualenv into ESP directory (detail)
    by galbramc
  1470. Only run minimal CAPS examples in beta (detail)
    by galbramc
  1471. Install torch for beta (detail)
    by galbramc
  1472. pip install torch for corsair (detail)
    by galbramc
  1473. Smartsr error log parse (detail)
    by galbramc
  1474. numpy suppression (detail)
    by galbramc
  1475. Always build egadslite (detail)
    by galbramc
  1476. Update julia path on linux (detail)
    by galbramc
  1477. Remove jlEGADS from Sanitizer and Valgrind (detail)
    by galbramc
  1478. mark helix3 and frustrum3 as expected successes (detail)
    by jfdannen
  1479. Add jlEGADS test to Sanitizer and valgrind (detail)
    by galbramc
  1480. Correct path (detail)
    by galbramc
  1481. Add julia testing (detail)
    by galbramc
  1482. Small fix in xfoil executables (detail)
    by galbramc
  1483. Higher output precision xfoil executables (detail)
    by galbramc
  1484. Upgrade to AFLR 10.22.23 (detail)
    by galbramc
  1485. Another regsx fix (detail)
    by galbramc
  1486. Fix email template (detail)
    by galbramc
  1487. Ignore ifort warnings (detail)
    by galbramc
  1488. Use updated wget for ESP_PreBuilt.bat (detail)
    by galbramc
  1489. Beta script updates (detail)
    by galbramc
  1490. Trying to limit pip install conflits. Cleaner batch pip install function. (detail)
    by galbramc
  1491. Skip some long running tests with Sanitizer and Valgrind (detail)
    by galbramc
  1492. Missed one more (detail)
    by galbramc
  1493. More python suppressions (detail)
    by galbramc
  1494. Suppress AFLR uninitialized data (detail)
    by galbramc
  1495. Yet more numpy suppressions (detail)
    by galbramc
  1496. Another numpy suppression (detail)
    by galbramc
  1497. Upgrade to AFLR 10.22.22 on Windoze. Suppress numpy leak. (detail)
    by galbramc
  1498. Upgrade to AFLR 10.22.22 on Unix systems (detail)
    by galbramc
  1499. Upgrade jenkins to SU2 7.3.1 (detail)
    by galbramc
  1500. Look for more tessellation errors in the log file (detail)
    by galbramc
  1501. Upgrade to AFLR 10.22.21 (detail)
    by galbramc
  1502. Add random sleep for Windoze pip install to avoid install conflicts (detail)
    by galbramc
  1503. Install corsairlite dependencies for ESP_Beta testing (detail)
    by galbramc
  1504. Python suppression (detail)
    by galbramc
  1505. More error checking in ESPbfr.bat (detail)
    by galbramc
  1506. Attempt Python 3.9.13 again (detail)
    by galbramc
  1507. macM1 uses 3.8.11 (detail)
    by galbramc
  1508. Revert back to ESP_Python 3.8.9 for now (detail)
    by galbramc
  1509. install matplotlib and scipy for corsairlite (detail)
    by galbramc
  1510. install packaging for corsairlite (detail)
    by galbramc
  1511. Upgade to ESP_Python-3.9.13 (detail)
    by galbramc
  1512. Install dill and cvxopt (detail)
    by galbramc
  1513. Fix funny permissions on DARWIN64 mastros (detail)
    by galbramc
  1514. Update macOS intel/M1 mastros with old macOS target (detail)
    by galbramc
  1515. astros has array out-of-bound problems (detail)
    by galbramc
  1516. Don't define ASTROS_ROOT on machines without astros (detail)
    by galbramc
  1517. Restore mastros on macOS, macM1, and restore astros on Linux (detail)
    by galbramc
  1518. Uses msys64 wget on Windoze (detail)
    by galbramc
  1519. fix formatting error associated with expected errors for frustrum3 and helix3 (detail)
    by jfdannen
  1520. fix formatting error associated with expected errors for frustrum3 and helix3 (detail)
    by jfdannen
  1521. add frustrum3 and helix3 to expected failures (detail)
    by jfdannen
  1522. Windoze requires exe extension (detail)
    by galbramc
  1523. Add mses to ESPbfr.tgz with tighter convergence tolerance (detail)
    by galbramc
  1524. Another python suppression (detail)
    by galbramc
  1525. change testing from serveCSM to serveESP (detail)
    by jfdannen
  1526. Third time is the charm (detail)
    by galbramc
  1527. Try updating Windoze avl again... (detail)
    by galbramc
  1528. Update avl exec on Linux and Windoze (detail)
    by galbramc
  1529. Try that again (detail)
    by galbramc
  1530. Update macOS avl executables without X11 dylib dependency (detail)
    by galbramc
  1531. Remove redundant testing (detail)
    by galbramc
  1532. Remove mastros.exe on macys and viggen because it does not work (detail)
    by galbramc
  1533. Don't look for python deprecation warnings (detail)
    by galbramc
  1534. Look for python deprecation warnings (detail)
    by galbramc
  1535. Limit threading with OMP_NUM_THREADS (detail)
    by galbramc
  1536. Don't pipe sanitize pyOCSM testing (detail)
    by galbramc
  1537. add numpy valgrind suppression (detail)
    by galbramc
  1538. Look for python unit test timing in log parse (detail)
    by galbramc
  1539. Reduce CAPS ESP_Commit testing (detail)
    by galbramc
  1540. scipy is now available on Monterey (detail)
    by galbramc
  1541. Look for planar meshing errors (detail)
    by galbramc
  1542. Update avl and DAWIN64/mastros.exe executables (detail)
    by galbramc
  1543. astros.exe does not work on Monterey (detail)
    by galbramc
  1544. Upgrade macOS santizer library path (detail)
    by galbramc
  1545. Remove libquadmath dependency on DARWIN64 (detail)
    by galbramc
  1546. Correct avl version number to 3.40 (detail)
    by galbramc
  1547. Reduce avl NVMAX for DARWINM1 (detail)
    by galbramc
  1548. Upgrade to avl 3.41 (detail)
    by galbramc
  1549. Upgrade to MYSTRAN 13.3A on Windoze (detail)
    by galbramc
  1550. Upgrade to Mystran 13.3a (detail)
    by galbramc
  1551. Another python suppression (detail)
    by galbramc
  1552. Update jenkins to run skeletonAIM example (detail)
    by galbramc
  1553. Upgrade to SU2-v7.3.0 for Jenkins (detail)
    by galbramc
  1554. Update error messages (detail)
    by galbramc
  1555. Upgrade to PointwiseV18.5R1 on macOS (detail)
    by galbramc
  1556. Another python suppression (detail)
    by galbramc
  1557. Don't build CAPS for OpenCSM with lint (detail)
    by galbramc
  1558. Upgrade to Pointwise V18.5R1 on reynolds. Compile serveESP for stanalizer (detail)
    by galbramc
  1559. Build serveESP (detail)
    by galbramc
  1560. Add csmOCCFailure_7.6.txt file (detail)
    by galbramc
  1561. Remove csmOCCFailure_7.6.txt directory (detail)
    by galbramc
  1562. Should have kept last numpy suppression (detail)
    by galbramc
  1563. Another try at suppressing numpy leaks (detail)
    by galbramc
  1564. Suppress numpy leak (detail)
    by galbramc
  1565. mark closeBody2 as expected success (detail)
    by jfdannen
  1566. Update sens parsers (detail)
    by galbramc
  1567. Jenkins updates for 7.6.0 (detail)
    by galbramc
  1568. update verification data for 7.6.0 (detail)
    by jfdannen
  1569. Add Warning: LockRelease to jenkins parser (detail)
    by galbramc
  1570. Don't set UDUNITS for beta testing (detail)
    by galbramc
  1571. Remove last alias (detail)
    by galbramc
  1572. Alias python3 on centOS8 (detail)
    by galbramc
  1573. Update mses path (detail)
    by galbramc
  1574. Add PATHs to MSES executables (detail)
    by galbramc
  1575. Upgrade Jenkins env for MSVC 2022 (detail)
    by galbramc
  1576. Update CASROOT (detail)
    by galbramc
  1577. Add 7.6 files (needs updates) (detail)
    by galbramc
  1578. Enable awave again for viggen (detail)
    by galbramc
  1579. mark closeBody2 as failure on 7.3.1 (detail)
    by jfdannen
  1580. changes to accomodate better sensitivities associated with tip treatment in BLENDs (detail)
    by jfdannen
  1581. Dissable astros and awave on viggen (detail)
    by galbramc
  1582. Use bash on Windoze as well (detail)
    by galbramc
  1583. Suppress output from test_pyOCSM to reduce email generation time. (detail)
    by galbramc
  1584. Update python suppression (detail)
    by galbramc
  1585. add debug.csm as known failure (detail)
    by jfdannen
  1586. Update how ESP_Python is found (detail)
    by galbramc
  1587. source .bashrc as part of env (detail)
    by galbramc
  1588. Fix scipy install on viggen (detail)
    by galbramc
  1589. Another Cart3D suppression (detail)
    by galbramc
  1590. Typo (detail)
    by galbramc
  1591. Use anaconda scipy on M1 for now (detail)
    by galbramc
  1592. Don't use system site packages for virtualenv (detail)
    by galbramc
  1593. Don't use system site packages for virtualenv (detail)
    by galbramc
  1594. Suppress perl memory leaks (detail)
    by galbramc
  1595. Remove cart perl command (detail)
    by galbramc
  1596. Missed CART3D_ARCH (detail)
    by galbramc
  1597. Update env for Cart3D design (detail)
    by galbramc
  1598. Change back the getdelim suppression (detail)
    by galbramc
  1599. Fix bug in Valgrind script not running CAPS unit test (detail)
    by galbramc
  1600. Try again to suppress libc problem (detail)
    by galbramc
  1601. Adjust sanitizer suppression (detail)
    by galbramc
  1602. Upgrade macOS clang 13.0.0 (detail)
    by galbramc
  1603. remove testing of plugs7a and plugs8a (detail)
    by jfdannen
  1604. Another Windoze fix (detail)
    by galbramc
  1605. Turn on echo again for Windoze (detail)
    by galbramc
  1606. Fix typo (detail)
    by galbramc
  1607. Add M1 to PreBuilt testing (detail)
    by galbramc
  1608. Upgrade to SU2 7.2.0 (detail)
    by galbramc
  1609. Fix for memcheck python script on darwin (detail)
    by galbramc
  1610. scipy and curses suppressions (detail)
    by galbramc
  1611. Use system site-packages (detail)
    by galbramc
  1612. Add openmdao to pip installs (detail)
    by galbramc
  1613. Globaly have minimal CAPS output for Jenkins (detail)
    by galbramc
  1614. Upgrade pointwise on macys (detail)
    by galbramc
  1615. Generalize valgrind suppression (detail)
    by galbramc
  1616. Another python suppression (detail)
    by galbramc
  1617. remove plugs6a from testing (detail)
    by jfdannen
  1618. Add keep-debuginfo=yes to valgrind flags (detail)
    by galbramc
  1619. Another attempt at suppression Pointwise memory problems (detail)
    by galbramc
  1620. Always suppress alloc dealloc missmatch (detail)
    by galbramc
  1621. Undo mystran exclusion from valgrind (detail)
    by galbramc
  1622. Suppress Pointwise alloc dealloc missmatch (detail)
    by galbramc
  1623. Exclude mystran from valgrind due to false positives (detail)
    by galbramc
  1624. Upgrade Pointwise on Reynolds (detail)
    by galbramc
  1625. Undo last change (detail)
    by galbramc
  1626. Fix virtualenv on macOS (detail)
    by galbramc
  1627. Don't install matplotlib for testing (detail)
    by galbramc
  1628. Upgrade valgrind version (detail)
    by galbramc
  1629. Dissable undefined sanitizer vptr option (detail)
    by galbramc
  1630. mark plugs4c as successful (detail)
    by jfdannen
  1631. Update mastros rpath on viggen (detail)
    by galbramc
  1632. Update ESPFLIBS for ubsan (detail)
    by galbramc
  1633. Another viggen update (detail)
    by galbramc
  1634. Enable viggen Memcheck and Undefined (detail)
    by galbramc
  1635. Switch back to bash on viggen (detail)
    by galbramc
  1636. Update ESPbft.tgz (detail)
    by galbramc
  1637. Remove anaconda from Windoze Env (detail)
    by galbramc
  1638. Correct python version on viggen (detail)
    by galbramc
  1639. Fix for viggen (detail)
    by galbramc
  1640. Upgrade to AFLR 10.17.5. Add DARWINM1 testing. (detail)
    by galbramc
  1641. One more try at Windoze (detail)
    by galbramc
  1642. Fix virtualenv on Windoze (detail)
    by galbramc
  1643. Also upgrade pip (detail)
    by galbramc
  1644. Try pip install multiple times (detail)
    by galbramc
  1645. Upgrade gcc version for sansLIP (detail)
    by galbramc
  1646. Suppress bash memory leak (detail)
    by galbramc
  1647. Suppress leak in sed (detail)
    by galbramc
  1648. Upgrade to libasan.so.6 (detail)
    by galbramc
  1649. Use gcc-11 for sanitizer (detail)
    by galbramc
  1650. fwrite valgrind suppression (detail)
    by galbramc
  1651. Fix typo (detail)
    by galbramc
  1652. Add valgrind to slugs testing (detail)
    by galbramc
  1653. One more memcheck fix (detail)
    by galbramc
  1654. Fix for MemcheckCaps (detail)
    by galbramc
  1655. Slugs fixes for sanitizer and valgrind (detail)
    by galbramc

Started by user galbramc

Static Analysis: No warnings
  • No issues for 31 builds, i.e. since build: #2
  • Quality gate: Success
Configuration MatrixLINUX64DARWIN64WIN64.2017
macys7.4
7.6
macys_VM7.4
7.6
reynolds7.4
7.6
windows10x647.4
7.6