Skip to content

Commit 00fde56

Browse files
authored
Merge pull request #2818 from dzalkind/of_io_update
OpenFAST IO updates: MoorDyn and StC
2 parents 2380d81 + 46c3d8f commit 00fde56

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

openfast_io/openfast_io/FAST_reader.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1717,7 +1717,10 @@ def read_StC(self,filename):
17171717
'''
17181718
StC_vt = {}
17191719

1720-
with open(os.path.join(self.FAST_directory, filename)) as f:
1720+
# Inputs should be relative to ServoDyn, like in OpenFAST
1721+
SvD_dir = os.path.dirname(self.fst_vt['Fst']['ServoFile'])
1722+
1723+
with open(os.path.join(self.FAST_directory, SvD_dir, filename)) as f:
17211724

17221725
f.readline()
17231726
f.readline()
@@ -3191,7 +3194,8 @@ def read_MoorDyn(self, moordyn_file):
31913194
if option_name.upper() == 'WATERKIN':
31923195
self.fst_vt['MoorDyn']['WaterKin'] = option_value.strip('"')
31933196
WaterKin_file = os.path.normpath(os.path.join(os.path.dirname(moordyn_file), self.fst_vt['MoorDyn']['WaterKin']))
3194-
self.read_WaterKin(WaterKin_file)
3197+
if self.fst_vt['MoorDyn']['WaterKin'].upper() not in ['0','UNUSED']:
3198+
self.read_WaterKin(WaterKin_file)
31953199

31963200
self.fst_vt['MoorDyn']['option_values'].append(float_read(option_value.strip('"'))) # some options values can be strings or floats
31973201
self.fst_vt['MoorDyn']['option_names'].append(option_name)

openfast_io/openfast_io/FAST_writer.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ def int_default_out(val, trim = False):
6565
"""
6666
if type(val) is float:
6767
if trim:
68-
return '{:d}'.format(val)
68+
return '{:d}'.format(int(val))
6969
else:
70-
return '{:<22d}'.format(val)
70+
return '{:<22d}'.format(int(val))
7171
else:
7272
if trim:
7373
return '{:}'.format(val)
@@ -250,7 +250,7 @@ def execute(self):
250250
self.write_MAP()
251251
elif self.fst_vt['Fst']['CompMooring'] == 3:
252252
self.write_MoorDyn()
253-
if 'option_names' in self.fst_vt['MoorDyn'] and 'WATERKIN' in self.fst_vt['MoorDyn']['option_names']:
253+
if self.fst_vt['WaterKin']: # will be empty if not read
254254
self.write_WaterKin(os.path.join(self.FAST_runDirectory,self.fst_vt['MoorDyn']['WaterKin_file']))
255255

256256
# # look at if the the self.fst_vt['BeamDyn'] is an array, if so, loop through the array
@@ -2497,10 +2497,14 @@ def write_MoorDyn(self):
24972497
f.write('---------------------- SOLVER OPTIONS ---------------------------------------\n')
24982498
for i in range(len(self.fst_vt['MoorDyn']['option_values'])):
24992499

2500-
if 'WATERKIN' in self.fst_vt['MoorDyn']['option_names'][i]:
2500+
if self.fst_vt['MoorDyn']['option_names'][i].upper() == 'WATERKIN' and self.fst_vt['WaterKin']:
2501+
# WATERKIN needs to be a string, and should have already been read in and part of fst_vt
25012502
self.fst_vt['MoorDyn']['WaterKin_file'] = self.FAST_namingOut + '_WaterKin.dat'
25022503
f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['MoorDyn']['WaterKin_file']+'"', self.fst_vt['MoorDyn']['option_names'][i], self.fst_vt['MoorDyn']['option_descriptions'][i]+'\n'))
2503-
else: # if not waterkin handle normally
2504+
elif self.fst_vt['MoorDyn']['option_names'][i].upper() in ['INERTIALF','WATERKIN']:
2505+
# These options need to be an integer
2506+
f.write('{:<22} {:<11} {:}'.format(int_default_out(self.fst_vt['MoorDyn']['option_values'][i]), self.fst_vt['MoorDyn']['option_names'][i], self.fst_vt['MoorDyn']['option_descriptions'][i]+'\n'))
2507+
else: # if not handle normally
25042508
f.write('{:<22} {:<11} {:}'.format(float_default_out(self.fst_vt['MoorDyn']['option_values'][i]), self.fst_vt['MoorDyn']['option_names'][i], self.fst_vt['MoorDyn']['option_descriptions'][i]+'\n'))
25052509

25062510
f.write('------------------------ OUTPUTS --------------------------------------------\n')

0 commit comments

Comments
 (0)