diff --git a/openfast_io/openfast_io/FAST_reader.py b/openfast_io/openfast_io/FAST_reader.py index 4500610412..b8dbc4199d 100644 --- a/openfast_io/openfast_io/FAST_reader.py +++ b/openfast_io/openfast_io/FAST_reader.py @@ -1717,7 +1717,10 @@ def read_StC(self,filename): ''' StC_vt = {} - with open(os.path.join(self.FAST_directory, filename)) as f: + # Inputs should be relative to ServoDyn, like in OpenFAST + SvD_dir = os.path.dirname(self.fst_vt['Fst']['ServoFile']) + + with open(os.path.join(self.FAST_directory, SvD_dir, filename)) as f: f.readline() f.readline() @@ -3191,7 +3194,8 @@ def read_MoorDyn(self, moordyn_file): if option_name.upper() == 'WATERKIN': self.fst_vt['MoorDyn']['WaterKin'] = option_value.strip('"') WaterKin_file = os.path.normpath(os.path.join(os.path.dirname(moordyn_file), self.fst_vt['MoorDyn']['WaterKin'])) - self.read_WaterKin(WaterKin_file) + if self.fst_vt['MoorDyn']['WaterKin'].upper() not in ['0','UNUSED']: + self.read_WaterKin(WaterKin_file) self.fst_vt['MoorDyn']['option_values'].append(float_read(option_value.strip('"'))) # some options values can be strings or floats self.fst_vt['MoorDyn']['option_names'].append(option_name) diff --git a/openfast_io/openfast_io/FAST_writer.py b/openfast_io/openfast_io/FAST_writer.py index 89917a8af5..e61474d112 100644 --- a/openfast_io/openfast_io/FAST_writer.py +++ b/openfast_io/openfast_io/FAST_writer.py @@ -65,9 +65,9 @@ def int_default_out(val, trim = False): """ if type(val) is float: if trim: - return '{:d}'.format(val) + return '{:d}'.format(int(val)) else: - return '{:<22d}'.format(val) + return '{:<22d}'.format(int(val)) else: if trim: return '{:}'.format(val) @@ -250,7 +250,7 @@ def execute(self): self.write_MAP() elif self.fst_vt['Fst']['CompMooring'] == 3: self.write_MoorDyn() - if 'option_names' in self.fst_vt['MoorDyn'] and 'WATERKIN' in self.fst_vt['MoorDyn']['option_names']: + if self.fst_vt['WaterKin']: # will be empty if not read self.write_WaterKin(os.path.join(self.FAST_runDirectory,self.fst_vt['MoorDyn']['WaterKin_file'])) # # 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): f.write('---------------------- SOLVER OPTIONS ---------------------------------------\n') for i in range(len(self.fst_vt['MoorDyn']['option_values'])): - if 'WATERKIN' in self.fst_vt['MoorDyn']['option_names'][i]: + if self.fst_vt['MoorDyn']['option_names'][i].upper() == 'WATERKIN' and self.fst_vt['WaterKin']: + # WATERKIN needs to be a string, and should have already been read in and part of fst_vt self.fst_vt['MoorDyn']['WaterKin_file'] = self.FAST_namingOut + '_WaterKin.dat' 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')) - else: # if not waterkin handle normally + elif self.fst_vt['MoorDyn']['option_names'][i].upper() in ['INERTIALF','WATERKIN']: + # These options need to be an integer + 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')) + else: # if not handle normally 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')) f.write('------------------------ OUTPUTS --------------------------------------------\n')