def main(): #\
    """Function to Instantiate a JacketSE Assembly: \n
       INPUTS \n
             All hardwired, so edit the quantities below all the way to the line "#________________ DO NOT MODIFY THE FOLLOWING ________________#" \n
             -See JacketOpt_Py&MDAOopt.py for more information. \n
       OUTPUTS \n
             myjckt -jacket assembly instance \n\n

             Optimization parameters:    \n\n

             f0          -float, target frequency [Hz]
             f0epsilon   -float,  f0*(1+f0epsilon) will not be exceeded \n
             jcktDTRmin  -Float, minimum jacket member DTR allowed, mostly for 60+waterdepths. \n
             mxftprint   -Float, max allowed foot print [m]
             guesses     -Float(n), guesses for all design variables check out DesVar class. \n
             bounds      -Float(n,2), bounds for all design variables check out DesVar class. \n\n
             SAMPLE CALLS: \n
             1.OPTIMIZATION: python JacketOpt_ExtCobyla.py C:\RRD\PYTHON\WISDEM\JacketSE\src\jacketse\MyJacketInputs.py \n
             2.OPTIMIZATION: python JacketOpt_Py&MDAOopt.py C:\RRD\PYTHON\WISDEM\JacketSE\src\jacketse\MyJacketInputs.py True \n
             3.BUILD JACKET: python >>> myjacket=C:\RRD\PYTHON\WISDEM\JacketSE\src\jacketse\MyJacketInputs.py \n
        """

    #Set inputs							     ###----ALL USER INPUT----###
    Jcktins=JcktGeoInputs()

    Jcktins.nlegs =4
    Jcktins.nbays =5
    Jcktins.batter=12.
    Jcktins.dck_botz =16.
    Jcktins.dck_width=2*6.
    Jcktins.weld2D   =0.5
    Jcktins.VPFlag = True    #vertical pile T/F;  to enable piles in frame3DD set pileinputs.ndiv>0
    Jcktins.clamped= False    #whether or not the bottom of the structure is rigidly connected. Use False when equivalent spring constants are being used.
    Jcktins.AFflag = False  #whether or not to use apparent fixity piles
    Jcktins.PreBuildTPLvl = 5  #if >0, the TP is prebuilt according to rules per PreBuildTP

    #______________________________________________#

    #Soil inputs
    Soilinputs=SoilGeoInputs()
    Soilinputs.zbots   =-np.array([3.,5.,7.,15.,30.,50.])
    Soilinputs.gammas  =np.array([10000.,10000.,10000.,10000.,10000.,10000.])
    Soilinputs.cus     =np.array([60000.,60000.,60000.,60000.,60000.,60000.])
    Soilinputs.phis    =np.array([26.,26.,26.,26.,26.,26])#np.array([36.,33.,26.,37.,35.,37.5])#np.array([36.,33.,26.,37.,35.,37.5])
    Soilinputs.delta   =25.
    Soilinputs.sndflg   =True
    Soilinputs.PenderSwtch   =False #True
    Soilinputs.SoilSF   =1.
    #______________________________________________#

    #Water and wind inputs
    Waterinputs=WaterInputs()
    Waterinputs.wdepth   =30.
    Waterinputs.wlevel   =30. #Distance from bottom of structure to surface  THIS, I believe is no longer needed as piles may be negative in z, to check and remove in case
    Waterinputs.T=12.  #Wave Period
    Waterinputs.HW=10. #Wave Height
    Waterinputs.Cd=3.  #Drag Coefficient, enhanced to account for marine growth and other members not calculated
    Waterinputs.Cm=8.#2.  #ADded mass Coefficient

    Windinputs=WindInputs()
    Windinputs.HH=100. #CHECK HOW THIS COMPLIES....
    Windinputs.U50HH=30. #assumed gust speed
    Windinputs.Cdj=4.  #Drag Coefficient for jacket members, enhanced to account for TP drag not calculated otherwise
    Windinputs.Cdt=2  #Drag Coefficient for tower, enhanced to account for TP drag not calculated otherwise
    #______________________________________________#

    #Pile data
    Pilematin=MatInputs()
    Pilematin.matname=np.array(['heavysteel'])

    Pileinputs=PileGeoInputs()
    Pileinputs.Pilematins=Pilematin
    Pileinputs.ndiv=0 #3			   ###----USER INPUT----###
    Pileinputs.Dpile=2.5
    Pileinputs.tpile=0.0254
    Pileinputs.Lp=20. #[m] Embedment length
    #______________________________________________#

    #Legs data
    legmatin=MatInputs()
    legmatin.matname=(['heavysteel','heavysteel','heavysteel','heavysteel'])
    Dleg=np.asarray([1.5]).repeat(Jcktins.nbays+1)                      #e.g., np.array([2.0,1.8,1.6,1.6,1.6])
    tleg=np.asarray([1.5*0.0254]).repeat(Jcktins.nbays+1)

    leginputs=LegGeoInputs()
    leginputs.legZbot   = 1.0		 ###----USER INPUT----###
    leginputs.ndiv=1     			 ###----USER INPUT----###
    leginputs.legmatins=legmatin
    leginputs.Dleg0=Dleg[0]   #For optimization we just pass 1st value
    leginputs.tleg0=tleg[0]   #For optimization we just pass 1st value


    #The following is a passthrough variables
    legbot_stmphin =1.5  #Distance from bottom of leg to second joint along z; must be>0
    #______________________________________________#

    #Xbrc data
    Xbrcmatin=MatInputs()
    Xbrcmatin.matname=np.array(['heavysteel']).repeat(Jcktins.nbays)
    Dbrc=np.asarray([1.]).repeat(Jcktins.nbays)#np.array([1.,1.,0.8,0.8])
    tbrc=np.asarray([0.0254]).repeat(Jcktins.nbays)

    Xbrcinputs=XBrcGeoInputs()
    Xbrcinputs.Dbrc0=Dbrc[0]  #For optimization we just pass 1st value
    Xbrcinputs.tbrc0=tbrc[0]  #For optimization we just pass 1st value
    Xbrcinputs.ndiv=1				 ###----USER INPUT----###
    Xbrcinputs.Xbrcmatins=Xbrcmatin
    Xbrcinputs.precalc=False   #This can be set to true if we want Xbraces to be precalculated in D and t, in which case the above set Dbrc and tbrc would be overwritten
    #______________________________________________#

    #Mbrc data
    Mbrcmatin=MatInputs()
    Mbrcmatin.matname=np.array(['heavysteel'])

    Mbrcinputs=MudBrcGeoInputs()
    Mbrcinputs.Dbrc_mud=1.5                  ###----USER INPUT----###
    Mbrcinputs.tbrc_mud=1.5*0.0254
    Mbrcinputs.ndiv=2					    ###----USER INPUT----###
    Mbrcinputs.Mbrcmatins=Mbrcmatin
    Mbrcinputs.precalc=False   #This can be set to true if we want Mudbrace to be precalculated in D and t, in which case the above set Dbrc_mud and tbrc_mud would be overwritten
    #______________________________________________#

    #Hbrc data
    Hbrcmatin=MatInputs()
    Hbrcmatin.matname=np.array(['heavysteel'])
    Dbrc_hbrc=1.1				           ###----USER INPUT----###

    Hbrcinputs=HBrcGeoInputs()
    Hbrcinputs.Dbrch=Dbrc_hbrc					   ###----USER INPUT----###
    Hbrcinputs.ndiv=0#2
    Hbrcinputs.Hbrcmatins=Hbrcmatin
    Hbrcinputs.precalc=True   #This can be set to true if we want Hbrace to be set=Xbrace top D and t, in which case the above set Dbrch and tbrch would be overwritten
    #______________________________________________#

    #TP data


    #Note PrebuildTPLvl is set in JacketIns				           ###----USER INPUT----###
    #TP lumped mass data
    TPlumpinputs=TPlumpMass()						      ###----ALL USER INPUT----###
    TPlumpinputs.mass=200.e3 #[kg]
    TPlumpinputs.CMoff= np.zeros(3)
    TPlumpinputs.I=np.zeros(6) #Note that the code will assume the mass distributed at the corners of the TP for Ixx,Iyy,Izz purposes

    TPstrtmatin=MatInputs()
    TPstmpsmatin=MatInputs()
    TPgirdmatin=MatInputs()
    TPbrcmatin=MatInputs()
    TPstemmatin=MatInputs()
    TPstmpsmatin.matname=np.array(['heavysteel'])
    TPstrtmatin.matname=np.array(['heavysteel'])
    TPbrcmatin.matname=np.array(['heavysteel'])
    TPgirdmatin.matname=np.array(['heavysteel'])
    TPstemmatin.matname=np.array(['heavysteel']).repeat(2) ###----ALL USER INPUT----###

    TPinputs=TPGeoInputs()
    TPinputs.TPstrtmatins=TPstrtmatin
    TPinputs.TPbrcmatins=TPbrcmatin
    TPinputs.TPstemmatins=TPstemmatin
    TPinputs.TPstmpmatins=TPstmpsmatin
    TPinputs.TPgirdmatins=TPgirdmatin

    #Set TP dimensions as leg and brace dimensions
    TPinputs.Dstrut=leginputs.Dleg[-1]				    ###----ALL USER INPUT----###
    TPinputs.tstrut=leginputs.tleg[-1]
    TPinputs.Dgir=Dbrc_hbrc
    TPinputs.tgir=0.0254
    TPinputs.Dbrc=TPinputs.Dgir
    TPinputs.tbrc=TPinputs.tgir
							     ###----ALL USER INPUT----###
    TPinputs.hstump=0.0#1.0
    TPinputs.Dstump=1.2
    TPinputs.tstump=0.04
    TPinputs.stumpndiv=1
    TPinputs.brcndiv=1
    TPinputs.girndiv=1
    TPinputs.strutndiv=1
    TPinputs.stemndiv=1
    TPinputs.nstems=3
    TPinputs.Dstem=np.array([6.]).repeat(TPinputs.nstems)
    TPinputs.tstem=np.array([0.1,0.11,0.11])
    TPinputs.hstem=np.array([6./TPinputs.nstems]).repeat(TPinputs.nstems)
    #______________________________________________#

    #Tower data
    Twrmatin=MatInputs()
    Twrmatin.matname=np.array(['heavysteel'])

    Twrinputs=TwrGeoInputs()
    Twrinputs.Twrmatins=Twrmatin
    #Twrinputs.Htwr=0.  #Trumped by HH
    Twrinputs.Htwr2frac=0.2  #fraction of tower height with constant x-section
    Twrinputs.ndiv=np.array([6,12])  #ndiv for uniform and tapered section			   ###----USER INPUT----###
    Twrinputs.DeltaZmax= 6. #[m], maximum FE element length allowed in the tower members (i.e. the uniform and the tapered members)
    Twrinputs.Db=5.6
    Twrinputs.DTRb=130.
    Twrinputs.Dt=0.55*Twrinputs.Db
    Twrinputs.DTRt=150.
        #Set whether or not DTRb and DTRt for the tower are the same. Note if next set to False it will trump DTRt setting above
    Twrinputs.DTRsdiff=False    ##SET THIS TO TRUE IF YOU WANT DTRs to be different between base and top

        #If you use the following 14 lines, The geometry defined above is ignored
    ###ztwr=np.array([  52.   ,   54.522,   57.044,   59.566,   62.088,   64.61 , 67.132,   72.176,   77.22 ,   82.264,   87.308,   92.352, 97.396,  102.44 ,  107.484,  112.528,  117.572,  122.616, 127.66  ]]) -52.
    ###Dtwr=np.array([ 5.6 ,  5.6 ,  5.6 ,  5.6 ,  5.6 ,  5.6 ,  5.6 ,  5.39,  5.18, 4.97,  4.76,  4.55,  4.34,  4.13,  3.92,  3.71,  3.5 ,  3.29, 3.08])
    ###ttwr=np.array([ 0.04307692,  0.04307692,  0.04307692,  0.04307692,  0.04307692, 0.04307692,  0.04307692,  0.04119829,  0.03931966,  0.03744103, 0.03556239,  0.03368376,  0.03180513,  0.0299265 ,  0.02804786, 0.02616923,  0.0242906 ,  0.02241197, 0.02053])
    ###pmtwr=[]  #(3,2) first col z's, second weights
    ####Interpolate data to refine tower discretization
    ###dz=1. #[m] maximum deltaz allowed in discretization
    ###ztwr2=np.linspace(ztwr[0],ztwr[-1],round((ztwr[-1]-ztwr[0])/dz))   #New discretization
    ###Dtwr_interp=interp1d(ztwr,Dtwr)
    ###ttwr_interp=interp1d(ztwr,ttwr)
    ###Twrinputs.ztwr=ztwr2
    ###Twrinputs.Dtwr=Dtwr_interp(ztwr2)
    ###Twrinputs.ttwr=ttwr_interp(ztwr2)
    ###Twrinputs.TwrlumpedMass=np.zeros([pmtwr.shape[0],11])
    ###Twrinputs.TwrlumpedMass[:,0:2]=pmtwr

    TwrRigidTop=True           #False=Account for RNA via math rather than a physical rigidmember
    #______________________________________________#

    #RNA data
    RNAins=RNAprops()
    RNAins.mass=3*350.e3  #[kg]
    RNAins.I[0]=86.579E+6  #[kg m2]
    RNAins.I[1]=53.530E+6  #[kg m2]
    RNAins.I[2]=58.112E+6  #[kg m2]
    RNAins.CMoff[2]=2.34  #[m]
    RNAins.Thoff[2]=RNAins.CMoff[2]  #[m]
    RNAins.yawangle=45.  #angle with respect to global X, CCW looking from above, wind from left
    RNAins.rna_weightM=True
    #______________________________________________#

    #RNA loads              Fx-z,         Mxx-zz
    RNA_F=np.array([1000.e3,0.,0.,0.,0.,0.])   #unfactored thrust, though accounting for gust and dynamic effects (no IEC PSF though)
    #______________________________________________#

    # Frame3DD parameters           									      ###----ALL USER INPUT----###
    FrameAuxIns=Frame3DDaux()
    FrameAuxIns.sh_fg=1               #shear flag-->Timoshenko
    FrameAuxIns.deltaz=5.
    FrameAuxIns.geo_fg=0
    FrameAuxIns.nModes = 6             # number of desired dynamic modes of vibration
    FrameAuxIns.Mmethod = 1            # 1: subspace Jacobi     2: Stodola
    FrameAuxIns.lump = 0               # 0: consistent mass ... 1: lumped mass matrix
    FrameAuxIns.tol = 1e-9             # mode shape tolerance
    FrameAuxIns.shift = 0.0            # shift value ... for unrestrained structures
    FrameAuxIns.gvector=np.array([0.,0.,-9.8065])    #GRAVITY

        #Decide whether or not to consider DLC 6.1 as well
    twodlcs=False

    #______________________________________________#
    #______________________________________________#

# OTHER AUXILIARY CONSTRAINTS AND TARGETS FOR OPTIMIZATION #
    #______________________________________________#
    #______________________________________________#

    #Set Optimization Bounds and guesses for the various variables:
    #          x=  [ batter,  Dpile,    tpile,        Lp,   Dleg,     tleg,       Dbrc,   tbrc,     Dbrc_mud,   tbrc_mud,   Dgit,      tgir,      Db,   DTRb   Dt,   DTRt   Htwr2fac        dck_widthfact]
    MnCnst = np.array([ 8.,      1.,    1.*0.0254,   20.,   1.,       1.*0.0254,  1.,    1.*0.0254,   1.,     1.*0.0254,      1.,     1.*0.0254,  5.,   120.,  3.,   120.,     0.05,         2.])
    MxCnst = np.array([ 15.,     2.5,   5.*0.0254,   50.,   2.5,      5.*0.0254,  2.,    5.*0.0254,   2.,     5.*0.0254,      2.,     5.*0.0254,  7.,   200.,  4.,   200.,     0.25,         3.])
    guesses= np.array([  10.,    1.5,   1.5*0.0254,  26.,   1.8,     1.5*0.0254,  1.2,   1.5*0.0254,  1.2,    1.5*0.0254,     1.2,    1.5*0.0254, 6.,   140.,  3.5,  150.,     0.2,          2.])

    #SET Maximum Footprint [m]
    mxftprint =30.

    #Set target frequency [Hz] and f0epsilon, i.e. fmax=(1+f0eps)*f0
    f0=0.22
    f0epsilon=0.1

    #Set the minminimum DTR allowed for jacket members; mostly for 60+waterdepths
    jcktDTRmin=22.

   #_____________________________________________________________#
   #________________ DO NOT MODIFY THE FOLLOWING ________________#
   #_____________________________________________________________#

    bounds=np.vstack((MnCnst,MxCnst))
    desvarmeans=np.mean(bounds,1)


    # Now Launch the assembly and pass all of the inputs

    myjckt=set_as_top(JacketSE(Jcktins.clamped,Jcktins.AFflag,twodlcs=twodlcs))
    myjckt.JcktGeoIn=Jcktins
    myjckt.Soilinputs=Soilinputs
    myjckt.Waterinputs=Waterinputs
    myjckt.Windinputs=Windinputs
    myjckt.Pileinputs=Pileinputs
    myjckt.leginputs=leginputs
    myjckt.legbot_stmphin =legbot_stmphin  #Distance from bottom of leg to second joint along z; must be>0
    myjckt.Xbrcinputs=Xbrcinputs
    myjckt.Mbrcinputs=Mbrcinputs
    myjckt.Hbrcinputs=Hbrcinputs
    myjckt.TPlumpinputs=TPlumpinputs
    myjckt.TPinputs=TPinputs

    myjckt.Twrinputs=Twrinputs
    myjckt.TwrRigidTop=TwrRigidTop       #Account for RNA via math rather than a physical rigidmember
    myjckt.RNAinputs=RNAins
    myjckt.RNA_F=RNA_F

    myjckt.FrameAuxIns=FrameAuxIns


    return myjckt,f0,f0epsilon,jcktDTRmin,mxftprint,guesses,bounds.T
Beispiel #2
0
def main():  #\
    """Function to Instantiate a JacketSE Assembly: \n
       INPUTS \n
             All hardwired, so edit the quantities below all the way to the line "#________________ DO NOT MODIFY THE FOLLOWING ________________#" \n
             -See JacketOpt_Py&MDAOopt.py for more information. \n
       OUTPUTS \n
             myjckt -jacket assembly instance \n\n

             Optimization parameters:    \n\n

             f0          -float, target frequency [Hz]
             f0epsilon   -float,  f0*(1+f0epsilon) will not be exceeded \n
             jcktDTRmin  -Float, minimum jacket member DTR allowed, mostly for 60+waterdepths. \n
             mxftprint   -Float, max allowed foot print [m]
             guesses     -Float(n), guesses for all design variables check out DesVar class. \n
             bounds      -Float(n,2), bounds for all design variables check out DesVar class. \n\n
             SAMPLE CALLS: \n
             1.OPTIMIZATION: python JacketOpt_ExtCobyla.py C:\RRD\PYTHON\WISDEM\JacketSE\src\jacketse\MyJacketInputs.py \n
             2.OPTIMIZATION: python JacketOpt_Py&MDAOopt.py C:\RRD\PYTHON\WISDEM\JacketSE\src\jacketse\MyJacketInputs.py True \n
             3.BUILD JACKET: python >>> myjacket=C:\RRD\PYTHON\WISDEM\JacketSE\src\jacketse\MyJacketInputs.py \n
        """

    #Set inputs							     ###----ALL USER INPUT----###
    Jcktins = JcktGeoInputs()

    Jcktins.nlegs = 4
    Jcktins.nbays = 5
    Jcktins.batter = 12.
    Jcktins.dck_botz = 16.
    Jcktins.dck_width = 2 * 6.
    Jcktins.weld2D = 0.5
    Jcktins.VPFlag = True  #vertical pile T/F;  to enable piles in frame3DD set pileinputs.ndiv>0
    Jcktins.clamped = False  #whether or not the bottom of the structure is rigidly connected. Use False when equivalent spring constants are being used.
    Jcktins.AFflag = False  #whether or not to use apparent fixity piles
    Jcktins.PreBuildTPLvl = 5  #if >0, the TP is prebuilt according to rules per PreBuildTP

    #______________________________________________#

    #Soil inputs
    Soilinputs = SoilGeoInputs()
    Soilinputs.zbots = -np.array([3., 5., 7., 15., 30., 50.])
    Soilinputs.gammas = np.array(
        [10000., 10000., 10000., 10000., 10000., 10000.])
    Soilinputs.cus = np.array([60000., 60000., 60000., 60000., 60000., 60000.])
    Soilinputs.phis = np.array(
        [26., 26., 26., 26., 26., 26]
    )  #np.array([36.,33.,26.,37.,35.,37.5])#np.array([36.,33.,26.,37.,35.,37.5])
    Soilinputs.delta = 25.
    Soilinputs.sndflg = True
    Soilinputs.PenderSwtch = False  #True
    Soilinputs.SoilSF = 1.
    #______________________________________________#

    #Water and wind inputs
    Waterinputs = WaterInputs()
    Waterinputs.wdepth = 30.
    Waterinputs.wlevel = 30.  #Distance from bottom of structure to surface  THIS, I believe is no longer needed as piles may be negative in z, to check and remove in case
    Waterinputs.T = 12.  #Wave Period
    Waterinputs.HW = 10.  #Wave Height
    Waterinputs.Cd = 3.  #Drag Coefficient, enhanced to account for marine growth and other members not calculated
    Waterinputs.Cm = 8.  #2.  #ADded mass Coefficient

    Windinputs = WindInputs()
    Windinputs.HH = 100.  #CHECK HOW THIS COMPLIES....
    Windinputs.U50HH = 30.  #assumed gust speed
    Windinputs.Cdj = 4.  #Drag Coefficient for jacket members, enhanced to account for TP drag not calculated otherwise
    Windinputs.Cdt = 2  #Drag Coefficient for tower, enhanced to account for TP drag not calculated otherwise
    #______________________________________________#

    #Pile data
    Pilematin = MatInputs()
    Pilematin.matname = np.array(['heavysteel'])

    Pileinputs = PileGeoInputs()
    Pileinputs.Pilematins = Pilematin
    Pileinputs.ndiv = 0  #3			   ###----USER INPUT----###
    Pileinputs.Dpile = 2.5
    Pileinputs.tpile = 0.0254
    Pileinputs.Lp = 20.  #[m] Embedment length
    #______________________________________________#

    #Legs data
    legmatin = MatInputs()
    legmatin.matname = ([
        'heavysteel', 'heavysteel', 'heavysteel', 'heavysteel'
    ])
    Dleg = np.asarray([1.5]).repeat(Jcktins.nbays +
                                    1)  #e.g., np.array([2.0,1.8,1.6,1.6,1.6])
    tleg = np.asarray([1.5 * 0.0254]).repeat(Jcktins.nbays + 1)

    leginputs = LegGeoInputs()
    leginputs.legZbot = 1.0  ###----USER INPUT----###
    leginputs.ndiv = 1  ###----USER INPUT----###
    leginputs.legmatins = legmatin
    leginputs.Dleg0 = Dleg[0]  #For optimization we just pass 1st value
    leginputs.tleg0 = tleg[0]  #For optimization we just pass 1st value

    #The following is a passthrough variables
    legbot_stmphin = 1.5  #Distance from bottom of leg to second joint along z; must be>0
    #______________________________________________#

    #Xbrc data
    Xbrcmatin = MatInputs()
    Xbrcmatin.matname = np.array(['heavysteel']).repeat(Jcktins.nbays)
    Dbrc = np.asarray([1.]).repeat(Jcktins.nbays)  #np.array([1.,1.,0.8,0.8])
    tbrc = np.asarray([0.0254]).repeat(Jcktins.nbays)

    Xbrcinputs = XBrcGeoInputs()
    Xbrcinputs.Dbrc0 = Dbrc[0]  #For optimization we just pass 1st value
    Xbrcinputs.tbrc0 = tbrc[0]  #For optimization we just pass 1st value
    Xbrcinputs.ndiv = 1  ###----USER INPUT----###
    Xbrcinputs.Xbrcmatins = Xbrcmatin
    Xbrcinputs.precalc = False  #This can be set to true if we want Xbraces to be precalculated in D and t, in which case the above set Dbrc and tbrc would be overwritten
    #______________________________________________#

    #Mbrc data
    Mbrcmatin = MatInputs()
    Mbrcmatin.matname = np.array(['heavysteel'])

    Mbrcinputs = MudBrcGeoInputs()
    Mbrcinputs.Dbrc_mud = 1.5  ###----USER INPUT----###
    Mbrcinputs.tbrc_mud = 1.5 * 0.0254
    Mbrcinputs.ndiv = 2  ###----USER INPUT----###
    Mbrcinputs.Mbrcmatins = Mbrcmatin
    Mbrcinputs.precalc = False  #This can be set to true if we want Mudbrace to be precalculated in D and t, in which case the above set Dbrc_mud and tbrc_mud would be overwritten
    #______________________________________________#

    #Hbrc data
    Hbrcmatin = MatInputs()
    Hbrcmatin.matname = np.array(['heavysteel'])
    Dbrc_hbrc = 1.1  ###----USER INPUT----###

    Hbrcinputs = HBrcGeoInputs()
    Hbrcinputs.Dbrch = Dbrc_hbrc  ###----USER INPUT----###
    Hbrcinputs.ndiv = 0  #2
    Hbrcinputs.Hbrcmatins = Hbrcmatin
    Hbrcinputs.precalc = True  #This can be set to true if we want Hbrace to be set=Xbrace top D and t, in which case the above set Dbrch and tbrch would be overwritten
    #______________________________________________#

    #TP data

    #Note PrebuildTPLvl is set in JacketIns				           ###----USER INPUT----###
    #TP lumped mass data
    TPlumpinputs = TPlumpMass()  ###----ALL USER INPUT----###
    TPlumpinputs.mass = 200.e3  #[kg]
    TPlumpinputs.CMoff = np.zeros(3)
    TPlumpinputs.I = np.zeros(
        6
    )  #Note that the code will assume the mass distributed at the corners of the TP for Ixx,Iyy,Izz purposes

    TPstrtmatin = MatInputs()
    TPstmpsmatin = MatInputs()
    TPgirdmatin = MatInputs()
    TPbrcmatin = MatInputs()
    TPstemmatin = MatInputs()
    TPstmpsmatin.matname = np.array(['heavysteel'])
    TPstrtmatin.matname = np.array(['heavysteel'])
    TPbrcmatin.matname = np.array(['heavysteel'])
    TPgirdmatin.matname = np.array(['heavysteel'])
    TPstemmatin.matname = np.array(['heavysteel'
                                    ]).repeat(2)  ###----ALL USER INPUT----###

    TPinputs = TPGeoInputs()
    TPinputs.TPstrtmatins = TPstrtmatin
    TPinputs.TPbrcmatins = TPbrcmatin
    TPinputs.TPstemmatins = TPstemmatin
    TPinputs.TPstmpmatins = TPstmpsmatin
    TPinputs.TPgirdmatins = TPgirdmatin

    #Set TP dimensions as leg and brace dimensions
    TPinputs.Dstrut = leginputs.Dleg[-1]  ###----ALL USER INPUT----###
    TPinputs.tstrut = leginputs.tleg[-1]
    TPinputs.Dgir = Dbrc_hbrc
    TPinputs.tgir = 0.0254
    TPinputs.Dbrc = TPinputs.Dgir
    TPinputs.tbrc = TPinputs.tgir
    ###----ALL USER INPUT----###
    TPinputs.hstump = 0.0  #1.0
    TPinputs.Dstump = 1.2
    TPinputs.tstump = 0.04
    TPinputs.stumpndiv = 1
    TPinputs.brcndiv = 1
    TPinputs.girndiv = 1
    TPinputs.strutndiv = 1
    TPinputs.stemndiv = 1
    TPinputs.nstems = 3
    TPinputs.Dstem = np.array([6.]).repeat(TPinputs.nstems)
    TPinputs.tstem = np.array([0.1, 0.11, 0.11])
    TPinputs.hstem = np.array([6. / TPinputs.nstems]).repeat(TPinputs.nstems)
    #______________________________________________#

    #Tower data
    Twrmatin = MatInputs()
    Twrmatin.matname = np.array(['heavysteel'])

    Twrinputs = TwrGeoInputs()
    Twrinputs.Twrmatins = Twrmatin
    #Twrinputs.Htwr=0.  #Trumped by HH
    Twrinputs.Htwr2frac = 0.2  #fraction of tower height with constant x-section
    Twrinputs.ndiv = np.array([
        6, 12
    ])  #ndiv for uniform and tapered section			   ###----USER INPUT----###
    Twrinputs.DeltaZmax = 6.  #[m], maximum FE element length allowed in the tower members (i.e. the uniform and the tapered members)
    Twrinputs.Db = 5.6
    Twrinputs.DTRb = 130.
    Twrinputs.Dt = 0.55 * Twrinputs.Db
    Twrinputs.DTRt = 150.
    #Set whether or not DTRb and DTRt for the tower are the same. Note if next set to False it will trump DTRt setting above
    Twrinputs.DTRsdiff = False  ##SET THIS TO TRUE IF YOU WANT DTRs to be different between base and top

    #If you use the following 14 lines, The geometry defined above is ignored
    ###ztwr=np.array([  52.   ,   54.522,   57.044,   59.566,   62.088,   64.61 , 67.132,   72.176,   77.22 ,   82.264,   87.308,   92.352, 97.396,  102.44 ,  107.484,  112.528,  117.572,  122.616, 127.66  ]]) -52.
    ###Dtwr=np.array([ 5.6 ,  5.6 ,  5.6 ,  5.6 ,  5.6 ,  5.6 ,  5.6 ,  5.39,  5.18, 4.97,  4.76,  4.55,  4.34,  4.13,  3.92,  3.71,  3.5 ,  3.29, 3.08])
    ###ttwr=np.array([ 0.04307692,  0.04307692,  0.04307692,  0.04307692,  0.04307692, 0.04307692,  0.04307692,  0.04119829,  0.03931966,  0.03744103, 0.03556239,  0.03368376,  0.03180513,  0.0299265 ,  0.02804786, 0.02616923,  0.0242906 ,  0.02241197, 0.02053])
    ###pmtwr=[]  #(3,2) first col z's, second weights
    ####Interpolate data to refine tower discretization
    ###dz=1. #[m] maximum deltaz allowed in discretization
    ###ztwr2=np.linspace(ztwr[0],ztwr[-1],round((ztwr[-1]-ztwr[0])/dz))   #New discretization
    ###Dtwr_interp=interp1d(ztwr,Dtwr)
    ###ttwr_interp=interp1d(ztwr,ttwr)
    ###Twrinputs.ztwr=ztwr2
    ###Twrinputs.Dtwr=Dtwr_interp(ztwr2)
    ###Twrinputs.ttwr=ttwr_interp(ztwr2)
    ###Twrinputs.TwrlumpedMass=np.zeros([pmtwr.shape[0],11])
    ###Twrinputs.TwrlumpedMass[:,0:2]=pmtwr

    TwrRigidTop = True  #False=Account for RNA via math rather than a physical rigidmember
    #______________________________________________#

    #RNA data
    RNAins = RNAprops()
    RNAins.mass = 3 * 350.e3  #[kg]
    RNAins.I[0] = 86.579E+6  #[kg m2]
    RNAins.I[1] = 53.530E+6  #[kg m2]
    RNAins.I[2] = 58.112E+6  #[kg m2]
    RNAins.CMoff[2] = 2.34  #[m]
    RNAins.Thoff[2] = RNAins.CMoff[2]  #[m]
    RNAins.yawangle = 45.  #angle with respect to global X, CCW looking from above, wind from left
    RNAins.rna_weightM = True
    #______________________________________________#

    #RNA loads              Fx-z,         Mxx-zz
    RNA_F = np.array(
        [1000.e3, 0., 0., 0., 0., 0.]
    )  #unfactored thrust, though accounting for gust and dynamic effects (no IEC PSF though)
    #______________________________________________#

    # Frame3DD parameters           									      ###----ALL USER INPUT----###
    FrameAuxIns = Frame3DDaux()
    FrameAuxIns.sh_fg = 1  #shear flag-->Timoshenko
    FrameAuxIns.deltaz = 5.
    FrameAuxIns.geo_fg = 0
    FrameAuxIns.nModes = 6  # number of desired dynamic modes of vibration
    FrameAuxIns.Mmethod = 1  # 1: subspace Jacobi     2: Stodola
    FrameAuxIns.lump = 0  # 0: consistent mass ... 1: lumped mass matrix
    FrameAuxIns.tol = 1e-9  # mode shape tolerance
    FrameAuxIns.shift = 0.0  # shift value ... for unrestrained structures
    FrameAuxIns.gvector = np.array([0., 0., -9.8065])  #GRAVITY

    #Decide whether or not to consider DLC 6.1 as well
    twodlcs = False

    #______________________________________________#
    #______________________________________________#

    # OTHER AUXILIARY CONSTRAINTS AND TARGETS FOR OPTIMIZATION #
    #______________________________________________#
    #______________________________________________#

    #Set Optimization Bounds and guesses for the various variables:
    #          x=  [ batter,  Dpile,    tpile,        Lp,   Dleg,     tleg,       Dbrc,   tbrc,     Dbrc_mud,   tbrc_mud,   Dgit,      tgir,      Db,   DTRb   Dt,   DTRt   Htwr2fac        dck_widthfact]
    MnCnst = np.array([
        8., 1., 1. * 0.0254, 20., 1., 1. * 0.0254, 1., 1. * 0.0254, 1.,
        1. * 0.0254, 1., 1. * 0.0254, 5., 120., 3., 120., 0.05, 2.
    ])
    MxCnst = np.array([
        15., 2.5, 5. * 0.0254, 50., 2.5, 5. * 0.0254, 2., 5. * 0.0254, 2.,
        5. * 0.0254, 2., 5. * 0.0254, 7., 200., 4., 200., 0.25, 3.
    ])
    guesses = np.array([
        10., 1.5, 1.5 * 0.0254, 26., 1.8, 1.5 * 0.0254, 1.2, 1.5 * 0.0254, 1.2,
        1.5 * 0.0254, 1.2, 1.5 * 0.0254, 6., 140., 3.5, 150., 0.2, 2.
    ])

    #SET Maximum Footprint [m]
    mxftprint = 30.

    #Set target frequency [Hz] and f0epsilon, i.e. fmax=(1+f0eps)*f0
    f0 = 0.22
    f0epsilon = 0.1

    #Set the minminimum DTR allowed for jacket members; mostly for 60+waterdepths
    jcktDTRmin = 22.

    #_____________________________________________________________#
    #________________ DO NOT MODIFY THE FOLLOWING ________________#
    #_____________________________________________________________#

    bounds = np.vstack((MnCnst, MxCnst))
    desvarmeans = np.mean(bounds, 1)

    # Now Launch the assembly and pass all of the inputs

    myjckt = set_as_top(
        JacketSE(Jcktins.clamped, Jcktins.AFflag, twodlcs=twodlcs))
    myjckt.JcktGeoIn = Jcktins
    myjckt.Soilinputs = Soilinputs
    myjckt.Waterinputs = Waterinputs
    myjckt.Windinputs = Windinputs
    myjckt.Pileinputs = Pileinputs
    myjckt.leginputs = leginputs
    myjckt.legbot_stmphin = legbot_stmphin  #Distance from bottom of leg to second joint along z; must be>0
    myjckt.Xbrcinputs = Xbrcinputs
    myjckt.Mbrcinputs = Mbrcinputs
    myjckt.Hbrcinputs = Hbrcinputs
    myjckt.TPlumpinputs = TPlumpinputs
    myjckt.TPinputs = TPinputs

    myjckt.Twrinputs = Twrinputs
    myjckt.TwrRigidTop = TwrRigidTop  #Account for RNA via math rather than a physical rigidmember
    myjckt.RNAinputs = RNAins
    myjckt.RNA_F = RNA_F

    myjckt.FrameAuxIns = FrameAuxIns

    return myjckt, f0, f0epsilon, jcktDTRmin, mxftprint, guesses, bounds.T