示例#1
0
})
h = 1e-40

# Setup aeroproblem, cfdsolver
ap = AeroProblem(name='mdo_tutorial',
                 alpha=1.8,
                 mach=0.80,
                 R=287.87,
                 altitude=10000.0,
                 areaRef=45.5,
                 chordRef=3.25,
                 evalFuncs=['cd', 'cmz', 'lift'])
ap.addDV('alpha')
ap.addDV('mach')
ap.addDV('altitude')
CFDSolver = ADFLOW(options=aeroOptions, debug=True)

if not 'complex' in sys.argv:
    # Solve system
    CFDSolver(ap, writeSolution=False)
    funcs = {}
    CFDSolver.evalFunctions(ap, funcs)
    # Solve sensitivities
    funcsSens = {}
    CFDSolver.evalFunctionsSens(ap, funcsSens)

    # Write values and derivatives out:
    if MPI.COMM_WORLD.rank == 0:
        for key in ['cd', 'cmz', 'lift']:
            print 'funcs[%s]:' % key
            reg_write(funcs['mdo_tutorial_%s' % key], 1e-10, 1e-10)
示例#2
0
     'nkswitchtol':1e-4,
     'adjointl2convergence': 1e-16,
     'nkls': 'non monotone',
     'frozenturbulence':False,
     'nkjacobianlag':2,
     'blocksplitting': True
 }
)
h = 1e-40
# Setup aeroproblem, cfdsolver
ap = AeroProblem(name='mdo_tutorial', alpha=1.8, mach=0.80, R=287.87,
                 altitude=10000.0, areaRef=45.5, chordRef=3.25, evalFuncs=['cl','cmz','drag'])

ap.addDV('alpha')
ap.addDV('mach')
CFDSolver = ADFLOW(options=aeroOptions)
if 'complex' in sys.argv:
    DVGeo = DVGeometry('../inputFiles/mdo_tutorial_ffd.fmt', complex=True)
else:
    DVGeo = DVGeometry('../inputFiles/mdo_tutorial_ffd.fmt', complex=False)

nTwist = 2
DVGeo.addRefAxis('wing', pyspline.Curve(x=numpy.linspace(5.0/4.0, 1.5/4.0+7.5, nTwist),
                                        y=numpy.zeros(nTwist),
                                        z=numpy.linspace(0,14, nTwist), k=2))
def twist(val, geo):
    for i in xrange(nTwist):
        geo.rot_z['wing'].coef[i] = val[i]

def span(val, geo):
    # Span
示例#3
0
ap = AeroProblem(name='fc_therm',
                 V=u_inf,
                 T=temp_air,
                 P=p_inf,
                 areaRef=1.0,
                 chordRef=1.0,
                 evalFuncs=['heatflux'],
                 alpha=0.0,
                 beta=0.00,
                 xRef=0.0,
                 yRef=0.0,
                 zRef=0.0)

# Create the solver
CFDSolver = ADFLOW(options=options, debug=False)

res = CFDSolver.getResidual(ap)
fluxes = CFDSolver.getHeatFluxes()
print(fluxes.imag / 1e-40)

# from python.pyADflow import ADFLOW

# CFDSolver = ADFLOW(options=options, debug=False)

# res = CFDSolver.getResidual(ap)
# # totalR0 = CFDSolver.getFreeStreamResidual(ap)
# # res /= totalR0
# # print('Norm of residual')
# # reducedSum = MPI.COMM_WORLD.reduce(numpy.sum(res**2))
# # print(reducedSum)
示例#4
0
                 V=u_inf,
                 T=temp_air,
                 P=p_inf,
                 areaRef=1.0,
                 chordRef=1.0,
                 evalFuncs=['heatflux', 'cd', 'cl'],
                 alpha=0.0,
                 beta=0.00,
                 xRef=0.0,
                 yRef=0.0,
                 zRef=0.0)

ap.addDV('alpha', value=0.0, upper=10.0, lower=-10, scale=1e0)

# Create the solver
CFDSolver = ADFLOW(options=options, debug=False)
# CFDSolver.setMesh(USMesh(mesh_options))

# res = CFDSolver.getResidual(ap)
# totalR0 = CFDSolver.getFreeStreamResidual(ap)
# res /= totalR0
# print('Norm of residual')
# reducedSum = MPI.COMM_WORLD.reduce(numpy.sum(res**2))
# print(reducedSum)

# res = CFDSolver.getResidual(ap)

# CFDSolver.setAeroProblem(ap)
funcs = {}
CFDSolver(ap)
CFDSolver.evalFunctions(ap, funcs)
示例#5
0
ap = AeroProblem(name='fc_therm',
                 V=u_inf,
                 T=temp_air,
                 P=p_inf,
                 areaRef=1.0,
                 chordRef=1.0,
                 evalFuncs=['heatflux'],
                 alpha=0.0,
                 beta=0.00,
                 xRef=0.0,
                 yRef=0.0,
                 zRef=0.0)

# Create the solver

CFDSolver = ADFLOW(options=options, debug=False)
#

res = CFDSolver.getResidual(ap)
# CFDSolver.callMasterRoutine(ap)
# CFDSolver(ap)

# # Create a common set of seeds
wDot = CFDSolver.getStatePerturbation(314)
xVDot = CFDSolver.getSpatialPerturbation(314)
dwBar = CFDSolver.getStatePerturbation(314)
fBar = CFDSolver.getSurfacePerturbation(314)
hfBar = CFDSolver.getSurfacePerturbation(314)[:, 1]

# # wBar = CFDSolver.computeJacobianVectorProductBwd(resBar=dwBar, wDeriv=True)
示例#6
0
rho_inf = p_inf / (287 * temp_air)

ap = AeroProblem(name='fc_therm',
                 V=u_inf,
                 T=temp_air,
                 P=p_inf,
                 areaRef=1.0,
                 chordRef=1.0,
                 evalFuncs=['heatflux'],
                 alpha=0.0,
                 beta=0.00,
                 xRef=0.0,
                 yRef=0.0,
                 zRef=0.0)

# Create the solver
CFDSolver = ADFLOW(options=options, debug=False)
# res = CFDSolver.getResidual(ap)
# totalR0 = CFDSolver.getFreeStreamResidual(ap)
# res /= totalR0
# print('Norm of residual')
# reducedSum = MPI.COMM_WORLD.reduce(numpy.sum(res**2))
# print(reducedSum)

# res = CFDSolver.getResidual(ap)
# CFDSolver(ap, writesolution=False)
funcvalues, forces, fluxes = CFDSolver.callMasterRoutine(ap)
print('funcvalues', funcvalues)
print('forces', forces)
print('fluxes', fluxes)
示例#7
0
def test6():
    # ****************************************************************************
    printHeader('MDO tutorial RANS Geometric Variables')
    # ****************************************************************************
    aeroOptions = copy.deepcopy(defOpts)

    # Now set the options that need to be overwritten for this example:
    aeroOptions.update(
        {'gridfile': '../inputFiles/mdo_tutorial_rans.cgns',
         'mgcycle':'2w',
         'equationtype':'RANS',
         'smoother':'dadi',
         'nsubiterturb':3,
         'nsubiter':3,
         'cfl':1.5,
         'cflcoarse':1.25,
         'ncyclescoarse':250,
         'ncycles':750,
         'monitorvariables':['resrho','resturb','cl','cd','cmz','yplus','totalr'],
         'usenksolver':True,
         'l2convergence':1e-17,
         'l2convergencecoarse':1e-2,
         'nkswitchtol':1e-4,
         'adjointl2convergence': 1e-16,
         'nkls': 'non monotone',
         'frozenturbulence':False,
         'nkjacobianlag':2,
     }
    )

    # Setup aeroproblem, cfdsolver
    ap = AeroProblem(name='mdo_tutorial', alpha=1.8, mach=0.80, 
                     altitude=10000.0, areaRef=45.5, chordRef=3.25, evalFuncs=['cl','cmz','drag'])
    
    ap.addDV('alpha')
    ap.addDV('mach')
    CFDSolver = ADFLOW(options=aeroOptions)
    if 'complex' in sys.argv:
        DVGeo = DVGeometry('../inputFiles/mdo_tutorial_ffd.fmt', complex=True)
    else:
        DVGeo = DVGeometry('../inputFiles/mdo_tutorial_ffd.fmt', complex=False)

    nTwist = 2
    DVGeo.addRefAxis('wing', pyspline.Curve(x=numpy.linspace(5.0/4.0, 1.5/4.0+7.5, nTwist), 
                                            y=numpy.zeros(nTwist),
                                            z=numpy.linspace(0,14, nTwist), k=2))
    def twist(val, geo):
        for i in xrange(nTwist):
            geo.rot_z['wing'].coef[i] = val[i]

    def span(val, geo):
        # Span
        C = geo.extractCoef('wing')
        s = geo.extractS('wing')
        for i in xrange(len(C)-1):
            C[-1, 2] = C[-1, 2] + val[0]
        geo.restoreCoef(C, 'wing')

    DVGeo.addGeoDVGlobal('twist', [0]*nTwist, twist, lower=-10, upper=10, scale=1.0)
    DVGeo.addGeoDVGlobal('span', [0], span, lower=-10, upper=10, scale=1.0)
    DVGeo.addGeoDVLocal('shape', lower=-0.5, upper=0.5, axis='y', scale=10.0)
    mesh = MBMesh(options={'gridFile':'../inputFiles/mdo_tutorial_rans.cgns'})
    CFDSolver.setMesh(mesh)
    CFDSolver.setDVGeo(DVGeo)
    #Aeroproblem must be set before we can call DVGeo.setDesignVars
    CFDSolver.setAeroProblem(ap)
    if not 'complex' in sys.argv:
        # Solve system
        CFDSolver(ap, writeSolution=False)
        funcs = {}
        CFDSolver.evalFunctions(ap, funcs)
        # Solve sensitivities
        funcsSens = {}
        CFDSolver.evalFunctionsSens(ap, funcsSens)

        # Write values and derivatives out:
        if MPI.COMM_WORLD.rank == 0:
            for key in ['cl','cmz','drag']:
                print 'funcs[%s]:'%key
                reg_write(funcs['mdo_tutorial_%s'%key],1e-10,1e-10)
            # Now write the derivatives in the same order the CS will do them:
            print ('Twist[0] Derivatives:')
            reg_write(funcsSens['mdo_tutorial_cl']['twist'][0][0], 1e-10,1e-10)
            reg_write(funcsSens['mdo_tutorial_cmz']['twist'][0][0], 1e-10,1e-10)
            reg_write(funcsSens['mdo_tutorial_drag']['twist'][0][0], 1e-10,1e-10)

            print ('Span Derivatives:')
            reg_write(funcsSens['mdo_tutorial_cl']['span'][0], 1e-10,1e-10)
            reg_write(funcsSens['mdo_tutorial_cmz']['span'][0], 1e-10,1e-10)
            reg_write(funcsSens['mdo_tutorial_drag']['span'][0], 1e-10,1e-10)

            print ('shape[13] Derivatives:')
            reg_write(funcsSens['mdo_tutorial_cl']['shape'][0][13], 1e-10,1e-10)
            reg_write(funcsSens['mdo_tutorial_cmz']['shape'][0][13], 1e-10,1e-10)
            reg_write(funcsSens['mdo_tutorial_drag']['shape'][0][13], 1e-10,1e-10)

            print ('mach Derivatives:')
            reg_write(funcsSens['mdo_tutorial_cl']['mach_mdo_tutorial'], 1e-10,1e-10)
            reg_write(funcsSens['mdo_tutorial_cmz']['mach_mdo_tutorial'], 1e-10,1e-10)
            reg_write(funcsSens['mdo_tutorial_drag']['mach_mdo_tutorial'], 1e-10,1e-10)

    else:
        # For the complex....we just do successive perturbation
        for ii in range(4):
            xRef = {'twist':[0.0, 0.0], 'span':[0.0], 'shape':numpy.zeros(72, dtype='D'), 'mach_mdo_tutorial':0.8}
            if ii == 0:
                xRef['twist'][0] += h*1j
            elif ii == 1:      
                xRef['span'][0] += h*1j
            elif ii == 2:
                xRef['shape'][13] += h*1j
            else:
                xRef['mach_mdo_tutorial']+=h*1j

            ap.setDesignVars(xRef)
            CFDSolver.resetFlow(ap)
            DVGeo.setDesignVars(xRef)
            CFDSolver(ap, writeSolution=False)
            funcs = {}
            CFDSolver.evalFunctions(ap, funcs)

            if MPI.COMM_WORLD.rank == 0:
                if ii == 0:
                    for key in ['cl','cmz','drag']:
                        print 'funcs[%s]:'%key
                        reg_write(numpy.real(funcs['mdo_tutorial_%s'%key]),1e-10,1e-10)

                if ii == 0:
                    print ('Twist[0] Derivatives:')
                elif ii == 1:
                    print ('Span Derivatives:')
                elif ii == 2:
                    print ('shape[13] Derivatives:')
                elif ii == 3:
                    print ('mach Derivatives:')

                for key in ['cl','cmz','drag']:
                    deriv = numpy.imag(funcs['mdo_tutorial_%s'%key])/h
                    reg_write(deriv,1e-10,1e-10)

    del CFDSolver
    del mesh
示例#8
0
def test5():
    # ****************************************************************************
    printHeader('MDO tutorial RANS Aerodynamic Variables')
    # ****************************************************************************
    aeroOptions = copy.deepcopy(defOpts)

    # Now set the options that need to be overwritten for this example:
    aeroOptions.update(
        {'gridfile': '../inputFiles/mdo_tutorial_rans.cgns',
         'mgcycle':'2w',
         'equationtype':'RANS',
         'smoother':'dadi',
         'nsubiterturb':3,
         'nsubiter':3,
         'cfl':1.5,
         'cflcoarse':1.25,
         'ncyclescoarse':250,
         'ncycles':750,
         'monitorvariables':['resrho','resturb','cl','cd','cmz','yplus','totalr'],
         'usenksolver':True,
         'l2convergence':1e-17,
         'l2convergencecoarse':1e-2,
         'nkswitchtol':1e-4,
         'adjointl2convergence': 1e-16,
         'nkls': 'non monotone',
         'frozenturbulence':False,
         'nkjacobianlag':2,
     }
    )

    # Setup aeroproblem, cfdsolver
    ap = AeroProblem(name='mdo_tutorial', alpha=1.8, mach=0.80, 
                     altitude=10000.0, areaRef=45.5, chordRef=3.25, evalFuncs=['cd','cmz','lift'])
    ap.addDV('alpha')
    ap.addDV('mach')
    ap.addDV('altitude')
    CFDSolver = ADFLOW(options=aeroOptions,debug=True)

    if not 'complex' in sys.argv:
        # Solve system
        CFDSolver(ap, writeSolution=False)
        funcs = {}
        CFDSolver.evalFunctions(ap, funcs)
        # Solve sensitivities
        funcsSens = {}
        CFDSolver.evalFunctionsSens(ap, funcsSens)

        # Write values and derivatives out:
        if MPI.COMM_WORLD.rank == 0:
            for key in ['cd','cmz','lift']:
                print 'funcs[%s]:'%key
                reg_write(funcs['mdo_tutorial_%s'%key],1e-10,1e-10)
            # Now write the derivatives in the same order the CS will do them:
            print ('Alpha Derivatives:')
            reg_write(funcsSens['mdo_tutorial_cd']['alpha_mdo_tutorial'], 1e-10,1e-10)
            reg_write(funcsSens['mdo_tutorial_cmz']['alpha_mdo_tutorial'], 1e-10,1e-10)
            reg_write(funcsSens['mdo_tutorial_lift']['alpha_mdo_tutorial'], 1e-10,1e-10)

            print ('Mach Derivatives:')
            reg_write(funcsSens['mdo_tutorial_cd']['mach_mdo_tutorial'], 1e-10,1e-10)
            reg_write(funcsSens['mdo_tutorial_cmz']['mach_mdo_tutorial'], 1e-10,1e-10)
            reg_write(funcsSens['mdo_tutorial_lift']['mach_mdo_tutorial'], 1e-10,1e-10)

            print ('Altitude Derivatives:')
            reg_write(funcsSens['mdo_tutorial_cd']['altitude_mdo_tutorial'], 1e-8,1e-8)
            reg_write(funcsSens['mdo_tutorial_cmz']['altitude_mdo_tutorial'], 1e-8,1e-8)
            reg_write(funcsSens['mdo_tutorial_lift']['altitude_mdo_tutorial'], 1e-8,1e-8)

    else:
        # For the complex....we just do successive perturbation
        for ii in range(3):
            ap.alpha = 1.8
            ap.mach = 0.80
            ap.altitude = 10000.0
            if ii == 0:
                ap.alpha += h*1j
            elif ii == 1:
                ap.mach += h*1j
            else:
                ap.altitude += h*1j

            CFDSolver.resetFlow(ap)
            CFDSolver(ap, writeSolution=False)
            funcs = {}
            CFDSolver.evalFunctions(ap, funcs)

            if MPI.COMM_WORLD.rank == 0:
                if ii == 0:
                    for key in ['cd','cmz','lift']:
                        print 'funcs[%s]:'%key
                        reg_write(numpy.real(funcs['mdo_tutorial_%s'%key]),1e-10,1e-10)

                if ii == 0:
                    print ('Alpha Derivatives:')
                    for key in ['cd','cmz','lift']:
                        deriv = numpy.imag(funcs['mdo_tutorial_%s'%key])/h
                        reg_write(deriv,1e-10,1e-10)

                elif ii == 1:
                    print ('Mach Derivatives:')
                    for key in ['cd','cmz','lift']:
                        deriv = numpy.imag(funcs['mdo_tutorial_%s'%key])/h
                        reg_write(deriv,1e-10,1e-10)

                else:
                    print ('AltitudeDerivatives:')
                    for key in ['cd','cmz','lift']:
                        deriv = numpy.imag(funcs['mdo_tutorial_%s'%key])/h
                        reg_write(deriv,1e-10,1e-10)


    del CFDSolver