Skip to content

Commit

Permalink
Adding blade root examples, windIO for IEA-15 and V27, and edits with…
Browse files Browse the repository at this point in the history
…in mesh_gen folder (#48)

Co-authored-by: Anderson <[email protected]>
  • Loading branch information
andersone35 and Anderson authored Oct 16, 2024
1 parent 46a062c commit deb300b
Show file tree
Hide file tree
Showing 12 changed files with 4,022 additions and 154 deletions.
78 changes: 78 additions & 0 deletions examples/buildIEA15InsertsRoot.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import pynumad as pynu
import numpy as np
import os
from os.path import join

from pynumad.mesh_gen.mesh_gen import get_root_mesh
from pynumad.io.mesh_to_yaml import *
from pynumad.analysis.abaqus.write import *

## This example builds a solid element model of the root of the IEA-15MW reference offshore wind turbine
## using a conventional bolt insert design.

## Define input yaml file and name of abaqus input file to be generated
bladeYaml = 'example_data/IEA-15-240-RWT.yaml'
abaqusFile = 'IEA_15_insert_root.inp'

## Read the model into a blade object
blade = pynu.Blade()
blade.read_yaml(bladeYaml)

## Define blade root specifications
rootDiameter = blade.definition.chord[0]
rtRad = 0.5*rootDiameter

axisPts = [0.,1.0] ## Range of points along the spanwise axis in meters
radius = [rtRad,rtRad] ## Radius corresponding to spanwise axis points
boltRad = 0.024 ## Radius of a single bolt
insThk = 0.01 ## Thickness of bolt insert layer
adhThk = 0.01 ## Thickness of bolt adhesive layer
rtThk = 3.0*(boltRad + adhThk + insThk) ## Total thickness of wall at root
thickness = [rtThk,rtThk] ## Axis point thickness
nIns = int(np.pi*rootDiameter/rtThk) ## Number of inserts
elementSize = adhThk ## Nominal element size for the model
elLayers = 10 ## Number of element layers in the spanwise direction

## Generate the root mesh
insertMesh = get_root_mesh(axisPts,radius,thickness,elementSize,elLayers,config='inserts',boltRad=boltRad,insertThk=insThk,adhesiveThk=adhThk,numIns=nIns)

## Define material properties specific to root design
materials = list()

mat = dict()
mat['name'] = 'boltMat'
mat['density'] = 7800.0
mat['elastic'] = {'E': [200.0e+9,200.0e+9,200.0e+9],
'nu': [0.3,0.3,0.3],
'G': [79.3e+9,79.3e+9,79.3e+9]}
materials.append(mat)

mat = dict()
mat['name'] = 'insertMat'
mat['density'] = 7800.0
mat['elastic'] = {'E': [200.0e+9,200.0e+9,200.0e+9],
'nu': [0.3,0.3,0.3],
'G': [79.3e+9,79.3e+9,79.3e+9]}
materials.append(mat)

mat = dict()
mat['name'] = 'adhesiveMat'
mat['density'] = 1100.0
mat['elastic'] = {'E': [4.56e+6,4.56e+6,4.56e+6],
'nu': [0.49,0.49,0.49],
'G': [1.52e+6,1.52e+6,1.52e+6]}
materials.append(mat)

mat = dict()
mat['name'] = 'fillMat'
mat['density'] = 1940.0
mat['elastic'] = {'E': [28.7e+9,16.6e+9,16.7e+9],
'nu': [0.5,0.0,0.17],
'G': [8.4e+9,3.49e+9,3.49e+9]}
materials.append(mat)

insertMesh['materials'] = materials

## Write the Abaqus input file

write_solid_general(abaqusFile,insertMesh)
70 changes: 70 additions & 0 deletions examples/buildIEA15TubeRoot.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import pynumad as pynu
import numpy as np
import os
from os.path import join

from pynumad.mesh_gen.mesh_gen import get_root_mesh
from pynumad.io.mesh_to_yaml import *
from pynumad.analysis.abaqus.write import *

## This example builds a solid element model of the root of the IEA-15MW reference offshore wind turbine
## using an imbedded solid tube insert.

## Define input yaml file and name of Abaqus input file to be generated
bladeYaml = 'example_data/IEA-15-240-RWT.yaml'
abaqusFile = 'IEA_15_tube_root.inp'

## Read the model into a blade object
blade = pynu.Blade()
blade.read_yaml(bladeYaml)

## Define blade root specifications
rootDiameter = blade.definition.chord[0]
rtRad = 0.5*rootDiameter

tubeThk = 0.048 ## Thickness of tube insert
adhThk = 0.01 ## Thickness of adhesive
axisPts = [0.,1.] ## Range of points along the spanwise axis in meters
radius = [rtRad,rtRad] ## Radius corresponding to spanwise axis points
rtThk = 1.5*(tubeThk + 2.0*adhThk) ## Thickness of root
thickness = [rtThk,rtThk] ## Axis point thickness
elementSize = adhThk ## Nominal element size for the model
elLayers = 10 ## Number of element layers in the spanwise direction
tubeExt = 1.0 ## Length of tube extension
extNE = 10 ## Number of element layer in tube extension

## Generate the root mesh
tubeMesh = get_root_mesh(axisPts,radius,thickness,elementSize,elLayers,config='tube',adhesiveThk=adhThk,tubeThk=tubeThk,tubeExtend=tubeExt,extNumEls=extNE)

## Define material properties specific to root design
materials = list()

mat = dict()
mat['name'] = 'adhesiveMat'
mat['density'] = 1100.0
mat['elastic'] = {'E': [4.56e+6,4.56e+6,4.56e+6],
'nu': [0.49,0.49,0.49],
'G': [1.52e+6,1.52e+6,1.52e+6]}
materials.append(mat)

mat = dict()
mat['name'] = 'fillMat'
mat['density'] = 1940.0
mat['elastic'] = {'E': [28.7e+9,16.6e+9,16.7e+9],
'nu': [0.5,0.0,0.17],
'G': [8.4e+9,3.49e+9,3.49e+9]}
materials.append(mat)

mat = dict()
mat['name'] = 'tubeMat'
mat['density'] = 7800.0
mat['elastic'] = {'E': [200.0e+9,200.0e+9,200.0e+9],
'nu': [0.3,0.3,0.3],
'G': [79.3e+9,79.3e+9,79.3e+9]}
materials.append(mat)

tubeMesh['materials'] = materials

## Write the Abaqus input file

write_solid_general(abaqusFile,tubeMesh)
Loading

0 comments on commit deb300b

Please sign in to comment.