def run_convergence_analysis_gmsh():
    config = dict()
    config['PHYSICAL_PROBLEM'] = 'EULER'
    config['MACH_NUMBER'] = str(0.65)
    config['AOA'] = str(1.25)
    config['FREESTREAM_PRESSURE'] = str(24999.8)  #for altitude 10363 m
    config['FREESTREAM_TEMPERATURE'] = str(220.79)  #for altitude 10363 m
    #config['GAS_CONSTANT'] = str(287.87)
    #config['REF_LENGTH'] = str(1.0)
    #config['REF_AREA'] = str(1.0)
    config['MARKER_EULER'] = '( airfoil )'
    config['MARKER_FAR'] = '( farfield )'
    config['EXT_ITER'] = str(1000)
    config['OUTPUT_FORMAT'] = 'PARAVIEW'
    config['MG_DAMP_RESTRICTION'] = str(0.75)
    config['MG_DAMP_PROLONGATION'] = str(0.75)

    #for gmsh
    innerMeshSize = np.linspace(0.001, 0.01, 21)
    outerMeshSize = np.linspace(0.1, 1., 21)
    innerMeshSize = np.flip(innerMeshSize, 0)
    outerMeshSize = np.flip(outerMeshSize, 0)

    cdList = np.zeros((len(innerMeshSize), len(outerMeshSize)))
    clList = np.zeros((len(innerMeshSize), len(outerMeshSize)))
    cmList = np.zeros((len(innerMeshSize), len(outerMeshSize)))
    eList = np.zeros((len(innerMeshSize), len(outerMeshSize)))

    ouputF = open(WORKING_DIR + '/' + 'convergenceResult.txt', 'w')
    ouputF.write(
        'innerMeshSize,outerMeshSize,CL,CD,CM,E,Iterations,Time(min)\n')

    for iI in range(0, len(innerMeshSize)):
        for iO in range(0, len(outerMeshSize)):

            projectName = 'nacaMesh_i%06d_o%06d' % (int(
                innerMeshSize[iI] * 1000), int(outerMeshSize[iO] * 1000))
            projectDir = WORKING_DIR + '/' + projectName
            #create project dir if necessary
            if not os.path.isdir(projectDir):
                os.mkdir(projectDir)

            cfd = CFDrun(projectName, used_cores=SU2_USED_CORES)
            cfd.load_airfoil_from_file(INPUT_DIR + '/naca641-212.csv')
            cfd.gmsh.innerMeshSize = innerMeshSize[iI]
            cfd.gmsh.outerMeshSize = outerMeshSize[iO]
            #cfd.gmsh_generate_mesh()
            cfd.gmsh_generate_mesh()
            cfd.su2_fix_mesh()
            cfd.su2_solve(config)
            results = cfd.su2_parse_iteration_result()
            #totalCL, totalCD, totalCM, totalE = cfd.su2_parse_results()
            totalCL = results['CL']
            totalCD = results['CD']
            totalCM = results['CMz']
            totalE = results['CL/CD']
            clList[iI][iO] = totalCL
            cdList[iI][iO] = totalCD
            cmList[iI][iO] = totalCM
            eList[iI][iO] = totalE
            ouputF.write(
                str(innerMeshSize[iI]) + ',' + str(outerMeshSize[iO]) + ',' +
                str(totalCL) + ',' + str(totalCD) + ',' + str(totalCM) + ',' +
                str(totalE) + ',' + str(results['Iteration']) + ',' +
                str(results['Time(min)']) + '\n')
            ouputF.flush()

            print('totalCL: ' + str(totalCL))
            print('totalCD: ' + str(totalCD))
            print('iI: ' + str(iI) + ' iO: ' + str(iO))

    plt.pcolor(innerMeshSize, outerMeshSize, clList)
    plt.colorbar()
    plt.show()
    print('done')
예제 #2
0
ouputF.write('machNr,AOA,CL,CD,CM,E,Iterations,Time(min)\n')



for mach in MACH_NR:
    projectName = 'analysis_mach_%0.3f' % (mach)
    projectDir = WORKING_DIR + '/' + projectName
    #create project dir if necessary
    if not os.path.isdir(projectDir):
        os.mkdir(projectDir)

    cfd = CFDrun(projectName, used_cores=SU2_USED_CORES)

    cfd.load_airfoil_from_file(INPUT_DIR + '/vfw-va2.dat')
    #cfd.construct2d_generate_mesh(scale=REF_LENGTH)
    cfd.gmsh_generate_mesh(scale=REF_LENGTH)
    cfd.su2_fix_mesh()

    config['MACH_NUMBER'] = str(mach)
    cfd.su2_solve(config)

    results = cfd.su2_parse_iteration_result()
    cfd.clean_up()

    print('totalCL: ' + str(results['CL']))
    print('totalCD: ' + str(results['CD']))

    ouputF.write(str(mach / 100.) + ','
                 + str(results['AOA']) + ','
                 + str(results['CL']) + ','
                 + str(results['CD']) + ','