From 514f554e50078f91e4c5912b472de3464f291dee Mon Sep 17 00:00:00 2001 From: David Robert Verelst <dave@dtu.dk> Date: Tue, 4 Dec 2018 14:01:20 +0100 Subject: [PATCH] add proper support for micro, meander turb for pbs_in_turb and zipchunks add pbsfile module and a function in htc_file module pep8 split pbs file in general PBSFile and temporary pbsfile_hawc2.py add hawc2/htc_file_set.py, improved PBSFile and integrated pbs generation in HTCFile changed from hardcoded to dynamic values add missing utils/cluster_tools/os_path.py remove unused problematic import fix failing test moved import win32wnet to try/except protected section add missing test files improved Template fixed some problem in pbs file generation more updates for pbs generation fix failing test use environ var for ppn instead of hardcoding in PBSMultiRunner add function to obtain wine command + add "_64" dlls to HTCFile.input_files fix tests fix double "//" problem in hawc2/hawc2_pbs_file.py --- wetb/hawc2/hawc2_pbs_file.py | 117 ++++ wetb/hawc2/htc_file.py | 40 +- wetb/hawc2/htc_file_set.py | 55 ++ .../input/data/DTU_10MW_RWT_Blade_st.dat | 109 +++ .../input/data/DTU_10MW_RWT_Hub_st.dat | 9 + .../input/data/DTU_10MW_RWT_Shaft_st.dat | 10 + .../input/data/DTU_10MW_RWT_Tower_st.dat | 44 ++ .../input/data/DTU_10MW_RWT_Towertop_st.dat | 9 + .../input/data/DTU_10MW_RWT_ae.dat | 42 ++ .../input/data/DTU_10MW_RWT_pc.dat | 638 +++++++++++++++++ .../input/htc/DTU_10MW_RWT.htc | 652 ++++++++++++++++++ .../input/htc/test_no_turb.htc | 647 +++++++++++++++++ wetb/hawc2/tests/test_htc_file.py | 20 + wetb/utils/cluster_tools/os_path.py | 31 + wetb/utils/cluster_tools/pbsfile.py | 191 +++++ wetb/utils/cluster_tools/pbsfile_hawc2.py | 208 ++++++ wetb/utils/cluster_tools/pbsjob.py | 27 +- wetb/utils/cluster_tools/ssh_client.py | 221 +++--- wetb/utils/tests/test_pbs_file.py | 147 ++++ 19 files changed, 3088 insertions(+), 129 deletions(-) create mode 100644 wetb/hawc2/hawc2_pbs_file.py create mode 100644 wetb/hawc2/htc_file_set.py create mode 100644 wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Blade_st.dat create mode 100644 wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Hub_st.dat create mode 100644 wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Shaft_st.dat create mode 100644 wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Tower_st.dat create mode 100644 wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Towertop_st.dat create mode 100644 wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_ae.dat create mode 100644 wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_pc.dat create mode 100644 wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/htc/DTU_10MW_RWT.htc create mode 100644 wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/htc/test_no_turb.htc create mode 100644 wetb/utils/cluster_tools/os_path.py create mode 100644 wetb/utils/cluster_tools/pbsfile.py create mode 100644 wetb/utils/cluster_tools/pbsfile_hawc2.py create mode 100644 wetb/utils/tests/test_pbs_file.py diff --git a/wetb/hawc2/hawc2_pbs_file.py b/wetb/hawc2/hawc2_pbs_file.py new file mode 100644 index 0000000..8ab247c --- /dev/null +++ b/wetb/hawc2/hawc2_pbs_file.py @@ -0,0 +1,117 @@ +from wetb.utils.cluster_tools.pbsfile import PBSFile, Template +import os +from wetb.utils.cluster_tools.os_path import pjoin, relpath, abspath,\ + cluster_path + +template = Template(""" + +#=============================================================================== +echo copy hawc2 to scratch +#=============================================================================== +(flock -x 200 +unzip -u -o -q [hawc2_path]/*.zip -d /scratch/$USER/$PBS_JOBID/hawc2/ +find [hawc2_path]/* ! -name *.zip -exec cp -u -t /scratch/$USER/$PBS_JOBID/hawc2/ {} + +) 200>/scratch/$USER/$PBS_JOBID/lock_file_hawc2 +mkdir -p /scratch/$USER/$PBS_JOBID/[model_name]/run_[jobname]/[rel_exe_dir] +cp /scratch/$USER/$PBS_JOBID/hawc2/* /scratch/$USER/$PBS_JOBID/[model_name]/run_[jobname]/[rel_exe_dir] + +#=============================================================================== +echo copy input +#=============================================================================== + +cd [model_path] +(flock -x 200 +[copy_input_to_scratch] +) 200>/scratch/$USER/$PBS_JOBID/[model_name]/lock_file_model +cd /scratch/$USER/$PBS_JOBID/[model_name] +[copy_input_to_exe_dir] + + +#=============================================================================== +echo Run HAWC2 +#=============================================================================== +cd /scratch/$USER/$PBS_JOBID/[model_name]/run_[jobname]/[rel_exe_dir] +[hawc2_cmd] [htc_file] + +#=============================================================================== +echo Copy output +#=============================================================================== +cd /scratch/$USER/$PBS_JOBID/[model_name]/run_[jobname] +[copy_output] + +rm -r /scratch/$USER/$PBS_JOBID/[model_name]/run_[jobname] + +echo Done +""") + + +def wine_cmd(platform='win32', hawc2='hawc2mb.exe', cluster='jess'): + wine_folder = {'jess': {'win32': '.wine32', 'win64': '.wine'}}[cluster][platform] + wine_prefix = "WINEARCH=%s WINEPREFIX=~/%s " % (platform, wine_folder) + if cluster == 'jess': + s = wine_prefix + "winefix\n" + else: + s = "" + return s + wine_prefix + "wine %s" % hawc2 + + +JESS_WINE32_HAWC2MB = wine_cmd() + + +class HAWC2PBSFile(PBSFile): + def __init__(self, hawc2_path, hawc2_cmd, htc_file, exe_dir, input_files, output_files, queue='workq', walltime='00:10:00'): + self.hawc2_path = hawc2_path + self.hawc2_cmd = hawc2_cmd + self.htc_file = htc_file + self.exe_dir = exe_dir + self.queue = queue + self.walltime = walltime + + if not os.path.isabs(htc_file): + htc_file = pjoin(exe_dir, htc_file) + else: + htc_file = htc_file.replace("\\", "/") + + if htc_file not in input_files: + input_files.append(htc_file) + self.input_files = [abspath((pjoin(exe_dir, f), abspath(f))[os.path.isabs(f)]) + for f in input_files] + self.htc_file = relpath(htc_file, exe_dir) + + self.output_files = [abspath((pjoin(exe_dir, f), abspath(f))[os.path.isabs(f)]) + for f in output_files] + + self.model_path = abspath(pjoin(exe_dir, relpath(os.path.commonprefix( + self.input_files + self.output_files).rpartition("/")[0], exe_dir))) + self.model_name = os.path.basename(abspath(self.model_path)) + self.jobname = os.path.splitext(os.path.basename(htc_file))[0] + + PBSFile.__init__(self, self.model_path, self.jobname, self.commands, queue, walltime=walltime) + + def commands(self): + rel_exe_dir = relpath(self.exe_dir, self.model_path) + copy_input_to_scratch, copy_input_to_exe_dir = self.copy_input() + return template(hawc2_path=os.path.dirname(cluster_path(self.hawc2_path)), + exe_dir=cluster_path(self.exe_dir), + copy_input_to_scratch=copy_input_to_scratch, + copy_input_to_exe_dir=copy_input_to_exe_dir, + rel_exe_dir=rel_exe_dir, + hawc2_cmd=self.hawc2_cmd, + htc_file=self.htc_file, + jobname=self.jobname, + copy_output=self.copy_output(), + model_path=cluster_path(self.model_path), + model_name=self.model_name) + + def copy_input(self): + rel_input_files = [relpath(f, self.model_path) for f in self.input_files] + + copy_input = "\n".join(["mkdir -p [TARGET]/%s && cp -u -r %s [TARGET]/%s" % (os.path.dirname(f), f, os.path.dirname(f)) + for f in rel_input_files]) + return (copy_input.replace("[TARGET]", "/scratch/$USER/$PBS_JOBID/[model_name]"), + copy_input.replace("[TARGET]", "/scratch/$USER/$PBS_JOBID/[model_name]/run_[jobname]")) + + def copy_output(self): + rel_output_files = [relpath(f, self.model_path) for f in self.output_files] + return "\n".join(["mkdir -p [model_path]/%s && cp -u -r %s [model_path]/%s" % (os.path.dirname(f), f, os.path.dirname(f)) + for f in rel_output_files]) diff --git a/wetb/hawc2/htc_file.py b/wetb/hawc2/htc_file.py index c99b4c2..d3b98e7 100644 --- a/wetb/hawc2/htc_file.py +++ b/wetb/hawc2/htc_file.py @@ -15,6 +15,8 @@ from builtins import str from future import standard_library from wetb.utils.process_exec import pexec from wetb.utils.cluster_tools.cluster_resource import unix_path_old +from wetb.utils.cluster_tools.pbsfile import PBSFile +from wetb.hawc2.hawc2_pbs_file import HAWC2PBSFile standard_library.install_aliases() from collections import OrderedDict @@ -80,18 +82,19 @@ class HTCFile(HTCContents, HTCDefaults, HTCExtensions): _contents = None def __init__(self, filename=None, modelpath=None): - """ + """ Parameters --------- filename : str Absolute filename of htc file modelpath : str - Model path relative to htc file + Model path relative to htc file """ if filename is not None: self.filename = filename self.modelpath = modelpath or self.auto_detect_modelpath() + if filename and self.modelpath != "unknown" and not os.path.isabs(self.modelpath): self.modelpath = os.path.realpath(os.path.join(os.path.dirname(self.filename), self.modelpath)) @@ -242,6 +245,29 @@ class HTCFile(HTCContents, HTCDefaults, HTCExtensions): if "wind" in self: # and self.wind.turb_format[0] > 0: self.wind.scale_time_start = start + def expected_simulation_time(self): + return 600 + + def pbs_file(self, hawc2_path, hawc2_cmd, queue='workq', walltime=None, + input_files=None, output_files=None, copy_turb=(True, True)): + walltime = walltime or self.expected_simulation_time() * 2 + if len(copy_turb) == 1: + copy_turb_fwd, copy_turb_back = copy_turb, copy_turb + else: + copy_turb_fwd, copy_turb_back = copy_turb + + input_files = input_files or self.input_files() + if copy_turb_fwd: + input_files += [f for f in self.turbulence_files() if os.path.isfile(f)] + + output_files = output_files or self.output_files() + if copy_turb_back: + output_files += self.turbulence_files() + + return HAWC2PBSFile(hawc2_path, hawc2_cmd, self.filename, self.modelpath, + input_files, output_files, + queue, walltime) + def input_files(self): self.contents # load if not loaded if self.modelpath == "unknown": @@ -264,9 +290,12 @@ class HTCFile(HTCContents, HTCDefaults, HTCExtensions): files.append(self.aero.bemwake_method.get('a-ct-filename', [None] * 3)[0]) for dll in [self.dll[dll] for dll in self.get('dll', {}).keys() if 'filename' in self.dll[dll]]: files.append(dll.filename[0]) + f, ext = os.path.splitext(dll.filename[0]) + files.append(f + "_64" + ext) if 'wind' in self: files.append(self.wind.get('user_defined_shear', [None])[0]) files.append(self.wind.get('user_defined_shear_turbulence', [None])[0]) + files.append(self.wind.get('met_mast_wind', [None])[0]) if 'wakes' in self: files.append(self.wind.get('use_specific_deficit_file', [None])[0]) files.append(self.wind.get('write_ct_cq_file', [None])[0]) @@ -281,8 +310,9 @@ class HTCFile(HTCContents, HTCDefaults, HTCExtensions): try: dtu_we_controller = self.dll.get_subsection_by_name('dtu_we_controller') theta_min = dtu_we_controller.init.constant__5[1] - files.append(os.path.join(os.path.dirname( - dtu_we_controller.filename[0]), "wpdata.%d" % theta_min).replace("\\", "/")) + if theta_min >= 90: + files.append(os.path.join(os.path.dirname( + dtu_we_controller.filename[0]), "wpdata.%d" % theta_min).replace("\\", "/")) except: pass @@ -323,7 +353,7 @@ class HTCFile(HTCContents, HTCDefaults, HTCExtensions): for key in [k for k in self.contents.keys() if k.startswith("output_at_time")]: files.append(self[key]['filename'][0] + ".dat") - return [f for f in files if f] + return [f.lower() for f in files if f] def turbulence_files(self): self.contents # load if not loaded diff --git a/wetb/hawc2/htc_file_set.py b/wetb/hawc2/htc_file_set.py new file mode 100644 index 0000000..63724df --- /dev/null +++ b/wetb/hawc2/htc_file_set.py @@ -0,0 +1,55 @@ +import glob +import os +import copy +from wetb.hawc2.hawc2_pbs_file import JESS_WINE32_HAWC2MB +from wetb.hawc2.htc_file import HTCFile +from wetb.utils.cluster_tools.pbsfile import PBSMultiRunner + + +class HTCFileSet(): + def __init__(self, model_path, htc_lst="**/*.htc"): + self.model_path = model_path + + if not isinstance(htc_lst, list): + htc_lst = [htc_lst] + + self.htc_files = [] + for htc_path in htc_lst: + if os.path.isfile(htc_path): + self.htc_files.append(htc_path) + else: + if not os.path.isabs(htc_path): + htc_path = os.path.join(model_path, htc_path) + for filename in glob.iglob(htc_path, recursive=True): + self.htc_files.append(filename) + + def pbs_files(self, hawc2_path, hawc2_cmd, htc_lst="**/*.htc", queue='workq', + input_files=None, output_files=None, copy_turb=(True, True)): + + return [HTCFile(htc).pbs_file(hawc2_path, hawc2_cmd, queue=queue, + input_files=copy.copy(input_files), + output_files=copy.copy(output_files), + copy_turb=copy_turb) for htc in self.htc_files] + + def save_pbs_files(self, hawc2_path, hawc2_cmd, htc_lst="**/*.htc", queue='workq', + input_files=None, output_files=None, copy_turb=(True, True)): + for pbs in self.pbs_files(hawc2_path, hawc2_cmd, htc_lst, queue=queue, + input_files=input_files, output_files=output_files, + copy_turb=copy_turb): + pbs.save(self.model_path) + + +if __name__ == '__main__': + #model_path = r'R:\HAWC2_tests\v12.6_mmpe3\win32\simple1' + model_path = "w:/simple1" + pbs_files = HTCFileSet(model_path).pbs_files( + hawc2_path=r"R:\HAWC2_tests\v12.6_mmpe3\hawc2\win32", hawc2_cmd=JESS_WINE32_HAWC2MB, input_files=['data/*']) + import pandas as pd + time_overview = pd.read_excel( + r'C:\mmpe\programming\Fortran\HAWC2_git\HAWC2\pytest_hawc2\release_tests\Time_overview.xlsx') + for pbs in pbs_files: + f = pbs.filename + + pbs.walltime = time_overview.loc[f[:-3].replace("pbs_in/", 'simple1/')]['mean'] * 24 * 3600 + pbs.save(model_path) + PBSMultiRunner(model_path, nodes=1, ppn=10).save() diff --git a/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Blade_st.dat b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Blade_st.dat new file mode 100644 index 0000000..eae9b1e --- /dev/null +++ b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Blade_st.dat @@ -0,0 +1,109 @@ +1 number of sets, Nset +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +#1 user_mads generated blade +r m x_cg y_cg ri_x ri_y x_sh y_sh E G I_x I_y I_p k_x k_y A pitch x_e y_e +$1 51 +0.00000E+00 1.1895105466400E+03 -4.1985179888300E-03 -3.5059579962800E-03 1.8239678497000E+00 1.7652157267900E+00 -2.8895401584900E-03 -9.4599884510700E-03 1.2612377674200E+10 2.5268066213700E+09 4.9056946702000E+00 4.8374310003100E+00 1.0865806875700E+01 5.4521445328300E-01 7.0390231177000E-01 1.4102146887000E+00 0.0000000000000E+00 -4.8664183717200E-03 -3.2299906894700E-03 +2.01520E+00 1.1916429178100E+03 -5.4439618321400E-03 -3.6461930390600E-03 1.8246920921200E+00 1.7649629604400E+00 -3.5783050873700E-03 -9.6016500280400E-03 1.2641876417300E+10 2.5276482488700E+09 4.9182734570600E+00 4.8344692993600E+00 1.0870970474400E+01 5.4567075087300E-01 7.0296982118200E-01 1.4113489447500E+00 0.0000000000000E+00 -6.2728509253100E-03 -3.2995773596300E-03 +3.74238E+00 1.2027669426200E+03 -1.1758111526700E-02 -5.6973155683300E-03 1.8195763302200E+00 1.7597984568100E+00 -1.5968655690400E-03 -8.4783174736300E-03 1.2511695058500E+10 2.4801493132600E+09 5.0349891054500E+00 4.8856674936400E+00 1.1017030141900E+01 5.5044546998400E-01 6.9372627938000E-01 1.4452331796800E+00 0.0000000000000E+00 -6.1267365999800E-03 -4.1121893323100E-03 +5.46940E+00 1.1714868441700E+03 -1.7286160405900E-02 -5.4086717673700E-03 1.7926990918500E+00 1.7476318690300E+00 6.2532797039800E-03 4.9543704158200E-03 1.2321252010200E+10 2.4282199177700E+09 4.8815650646700E+00 4.7142444976900E+00 1.0540919531300E+01 5.6143422215200E-01 6.7388619361400E-01 1.4329520800800E+00 0.0000000000000E+00 -1.6068469122500E-02 -4.4695825596400E-03 +7.19645E+00 1.1136234106900E+03 -1.4259188108700E-03 -8.2311449642400E-03 1.7357347382100E+00 1.7215038179700E+00 3.7378926346100E-02 1.1112603033500E-02 1.1441437746400E+10 2.2083100352200E+09 4.7682804461900E+00 4.6362962060300E+00 1.0026180334600E+01 5.7007255711400E-01 6.4038771972200E-01 1.4725978390700E+00 0.0000000000000E+00 1.3534924741700E-02 -5.2457557582700E-03 +8.92350E+00 1.0493102458700E+03 1.9160353190000E-02 -3.6385611942200E-03 1.6187141969400E+00 1.7196128050300E+00 1.1215493675900E-01 3.7069214029500E-02 1.0953450524200E+10 2.0868082277200E+09 4.0264371864700E+00 4.6436692842000E+00 8.8126320170900E+00 5.8572771871500E-01 5.8474462805300E-01 1.4571870194300E+00 -4.2803954889000E+01 4.0854186052500E-02 2.5093784189100E-03 +1.06503E+01 9.7462848090200E+02 9.8114665200400E-02 3.9630065014200E-03 1.5141873722800E+00 1.6657315692800E+00 2.9087418866400E-01 6.7433683939400E-02 1.0162502747900E+10 1.9020671355100E+09 3.5220808760200E+00 4.3235011648200E+00 7.3444508605600E+00 5.9391478638900E-01 5.2456502342500E-01 1.4591505745600E+00 -3.5909397310600E+01 1.3650631459200E-01 8.0682858054300E-03 +1.23760E+01 9.0874188779200E+02 1.5616383151500E-01 1.2428562115700E-02 1.3837416540400E+00 1.6318286880200E+00 4.9930990502200E-01 1.0014631816500E-01 9.6832117771700E+09 1.7856338288700E+09 2.9318695502800E+00 3.9106762301900E+00 5.6566008359900E+00 5.9136688872300E-01 4.5989050216400E-01 1.4303853381000E+00 -2.5736828258200E+01 2.0410746845700E-01 1.0987633438700E-02 +1.41042E+01 8.6887170142100E+02 2.5432851905800E-01 2.2064361519000E-02 1.2498165019500E+00 1.6077096253100E+00 7.5432071385600E-01 9.1496208003100E-02 9.3376424008600E+09 1.7097395998800E+09 2.4300281807800E+00 3.6162439463100E+00 4.3560430788700E+00 5.9542698629100E-01 4.0705105372900E-01 1.4194826514100E+00 -1.8926894413700E+01 3.1035806756800E-01 1.6420291103700E-02 +1.55442E+01 8.4550719319400E+02 3.2170368269200E-01 3.0507448249400E-02 1.1537727157400E+00 1.5998849395600E+00 9.3458641142400E-01 9.6038546189200E-02 9.3746485006800E+09 1.7394229625100E+09 2.0400109391700E+00 3.3885411823800E+00 3.4656518118700E+00 6.1269749974900E-01 3.6363000707500E-01 1.3756561435000E+00 -1.4276252536400E+01 3.8590948942100E-01 2.2740417083000E-02 +1.76981E+01 7.7515195107600E+02 3.8517605913000E-01 3.1942486935800E-02 1.0508761988200E+00 1.5921104723900E+00 1.0894866416300E+00 1.0366186145400E-01 8.6246328910300E+09 1.5898274708000E+09 1.7144833017400E+00 3.1887681795700E+00 2.5486377473300E+00 5.7799102630800E-01 3.3667702381200E-01 1.3549343620400E+00 -1.0973805967700E+01 4.8371396728700E-01 2.1677729468100E-02 +1.94317E+01 7.3579357111000E+02 4.2548071931400E-01 3.8076049352800E-02 9.9323124019200E-01 1.5986484910800E+00 1.0923477168000E+00 1.2220059333200E-01 8.4376031857100E+09 1.5622631522900E+09 1.4998016708300E+00 3.0084313150500E+00 2.1448120841500E+00 5.4299760560600E-01 3.3338347052900E-01 1.3050199458400E+00 -8.8682456551000E+00 5.5044270832900E-01 2.8664302238300E-02 +2.11593E+01 6.9112424644200E+02 4.8108386833600E-01 4.1360037938300E-02 9.4504647784500E-01 1.5872617993100E+00 1.1711384993500E+00 1.2246496451800E-01 8.1292628977100E+09 1.5034440604600E+09 1.3295048603000E+00 2.8210023370100E+00 1.7545586776000E+00 4.9797234889900E-01 3.2453724039100E-01 1.2632075310200E+00 -7.6219379753200E+00 6.2079350008200E-01 3.3419770972600E-02 +2.28863E+01 6.5485249686100E+02 5.3665382110900E-01 4.2137537761300E-02 9.0128602446900E-01 1.5724045270000E+00 1.2376736186900E+00 1.1794893100500E-01 7.8498149282600E+09 1.4507906976400E+09 1.1889084903900E+00 2.6301339414700E+00 1.4605979748100E+00 4.5613549318700E-01 3.1932666461700E-01 1.2304533069300E+00 -6.7895828161400E+00 6.9634716663300E-01 3.5356670241700E-02 +2.46133E+01 6.2587614782200E+02 5.8576678860100E-01 4.0679791544700E-02 8.6025641350000E-01 1.5524732566900E+00 1.2881154754400E+00 1.1210429913100E-01 7.6933178861900E+09 1.4225156639900E+09 1.0578734005100E+00 2.4399605512900E+00 1.2257810999800E+00 4.2256751805400E-01 3.1597384318900E-01 1.1939057439300E+00 -6.0902950485800E+00 7.5899794347000E-01 3.4529849533400E-02 +2.63408E+01 5.9332091893200E+02 5.7517768080200E-01 3.6891876639700E-02 8.1276558845400E-01 1.5640192563800E+00 1.3139169904200E+00 9.8433717979000E-02 7.6801369935100E+09 1.4137418986000E+09 8.9619478847000E-01 2.4418499749200E+00 1.0034870108200E+00 3.8226251665900E-01 3.1285484941500E-01 1.1343717277200E+00 -4.8934018236900E+00 7.3457335515000E-01 3.0757297066400E-02 +2.80683E+01 5.8096905879300E+02 5.8854668456400E-01 2.9768978963500E-02 7.7159426575900E-01 1.5348937388700E+00 1.3092580439700E+00 8.4350335478200E-02 7.7520776168100E+09 1.4243280889400E+09 7.8601319966200E-01 2.2784834466600E+00 8.7234564660600E-01 3.8268852091900E-01 3.0914334076600E-01 1.1038716341600E+00 -4.5298176588900E+00 7.5377195335800E-01 2.3493526461900E-02 +2.97953E+01 5.6622541685800E+02 6.0654184080900E-01 2.3289398965700E-02 7.3412215492400E-01 1.5023186594600E+00 1.3212879161700E+00 7.2340315434200E-02 7.8326619567900E+09 1.4301581099500E+09 6.8907669599700E-01 2.1077878368500E+00 7.6182657625000E-01 3.7542080694600E-01 3.0417528738000E-01 1.0702895223200E+00 -4.2521269588800E+00 7.7214298518400E-01 1.6751574941300E-02 +3.15229E+01 5.4823508892400E+02 6.1111223612500E-01 1.9130220898200E-02 7.0103020485900E-01 1.4623267092100E+00 1.3075290992600E+00 6.2938322874400E-02 8.1438316792900E+09 1.4815984381600E+09 5.8915261340800E-01 1.8473935328800E+00 6.4921957366900E-01 3.7889235537100E-01 2.9906427280000E-01 1.0059235340500E+00 -4.1030514815000E+00 7.9059797007900E-01 1.2354001170100E-02 +3.32504E+01 5.2964795864300E+02 6.2690400552300E-01 1.7508798074100E-02 6.7070431671600E-01 1.4183325249000E+00 1.2971825957300E+00 5.9176115243200E-02 8.1818776927200E+09 1.4772064299300E+09 5.2076229459300E-01 1.6545749806600E+00 5.6422421516700E-01 3.7379957050200E-01 2.9254145554400E-01 9.7204568400300E-01 -3.9262195332800E+00 8.0974480166700E-01 1.0611658804800E-02 +3.49775E+01 5.1031210665500E+02 6.3366440974700E-01 1.7495930149000E-02 6.4213570138000E-01 1.3798399676600E+00 1.2795825800800E+00 5.7574436616200E-02 8.6793220676500E+09 1.5620724504800E+09 4.3673212852600E-01 1.4318972361600E+00 4.7662555406300E-01 3.7629336902300E-01 2.8519648937000E-01 8.9453603388800E-01 -3.6506648817600E+00 8.0991314764700E-01 1.0740837050400E-02 +3.67050E+01 4.9468140090000E+02 6.2123062547100E-01 1.8536510979800E-02 6.1228572663700E-01 1.3436783853200E+00 1.2484738075900E+00 5.7772072891500E-02 8.7529878155200E+09 1.5711576555200E+09 3.8274029960300E-01 1.3113597835600E+00 4.1649750890700E-01 3.7797325768400E-01 2.7764941463000E-01 8.6314937587800E-01 -3.3504185092000E+00 7.9421888660900E-01 1.1863118684300E-02 +3.84325E+01 4.7751441090300E+02 6.1671457751500E-01 1.9790956392400E-02 5.8437517334000E-01 1.3017235613400E+00 1.2256416038900E+00 5.8799485883500E-02 8.8203174131900E+09 1.5722320855600E+09 3.3504952587100E-01 1.1836269637700E+00 3.6305491220100E-01 3.7080604891300E-01 2.7289462387300E-01 8.3078430157300E-01 -3.0923243167700E+00 7.8313822714900E-01 1.3233202666400E-02 +4.00731E+01 4.6092902978900E+02 5.9933713524900E-01 2.1499292267500E-02 5.5880729667000E-01 1.2663977261800E+00 1.1895786347800E+00 5.9352791736300E-02 8.9718642781600E+09 1.5934954366400E+09 2.9181221254300E-01 1.0553058645900E+00 3.1559423319700E-01 3.7341587272400E-01 2.6740864174400E-01 7.9230514231500E-01 -2.8861283729100E+00 7.6830015589200E-01 1.4989825736300E-02 +4.18008E+01 4.4177737386800E+02 5.8521412152000E-01 2.3238890882000E-02 5.3355764822500E-01 1.2237039468600E+00 1.1586826634600E+00 6.0484715159600E-02 9.1464745748000E+09 1.6199735159300E+09 2.5105945957200E-01 9.2960365503900E-01 2.7357637895900E-01 3.7847979594800E-01 2.5931734525900E-01 7.4925536690300E-01 -2.6458203363900E+00 7.5440965368000E-01 1.6914070361900E-02 +4.35282E+01 4.2533330680600E+02 5.6647290694600E-01 2.5038621071400E-02 5.0861214711000E-01 1.1893969175300E+00 1.1275191804000E+00 6.1099296165700E-02 9.2998497900600E+09 1.6443314869100E+09 2.1660221033800E-01 8.2839522065800E-01 2.3830002783500E-01 3.8130545192800E-01 2.5509220441600E-01 7.1224347118200E-01 -2.4107022019400E+00 7.3493460170100E-01 1.8856303151100E-02 +4.52552E+01 4.0138217955200E+02 5.7444515585500E-01 2.5974427155900E-02 4.8773023818400E-01 1.1342513537900E+00 1.0934861417500E+00 6.2102016462500E-02 9.6457837632900E+09 1.6924819059400E+09 1.8211091067100E-01 6.8882331753400E-01 1.9962295090900E-01 3.7753153600800E-01 2.5507269892700E-01 6.5398008499400E-01 -2.2552213782300E+00 7.3032423476100E-01 2.0210357373600E-02 +4.69828E+01 3.8514411819300E+02 5.5420965093100E-01 2.7297706814300E-02 4.6512977172000E-01 1.1000699967100E+00 1.0606980084900E+00 6.2125185857600E-02 9.6189475979500E+09 1.6874926857600E+09 1.5956937399400E-01 6.2097034756000E-01 1.7605036984100E-01 3.8113422151800E-01 2.4807945838600E-01 6.2984928542800E-01 -2.0470280641600E+00 7.0793251882400E-01 2.1719431242200E-02 +4.87103E+01 3.6594790812300E+02 5.4723168319200E-01 2.7952078566000E-02 4.4551193684300E-01 1.0576837827400E+00 1.0269209921700E+00 6.2227159762100E-02 1.0275011731700E+10 1.7997546392900E+09 1.3095617095600E-01 5.1863014230200E-01 1.4668567008700E-01 3.8479968177700E-01 2.4666334633300E-01 5.6682976910800E-01 -1.8549527174500E+00 6.8881859187800E-01 2.2754297636900E-02 +5.04373E+01 3.4693731101900E+02 5.3134340799200E-01 2.8479011326000E-02 4.2617250498700E-01 1.0189764767900E+00 9.9204116032600E-01 6.1995972176000E-02 1.0176537170300E+10 1.7709430860300E+09 1.1486441641000E-01 4.5882376408800E-01 1.2714040569300E-01 3.7947637279200E-01 2.4259098121100E-01 5.4336643423200E-01 -1.6958849515400E+00 6.7001496356200E-01 2.3466626259100E-02 +5.22512E+01 3.2632244339000E+02 5.2484510263200E-01 2.8492484166200E-02 4.0849418845600E-01 9.6685376535200E-01 9.5441803296500E-01 6.1092856242200E-02 1.0847391413500E+10 1.8892620158100E+09 9.3582260807700E-02 3.6796062727700E-01 1.0504767312700E-01 3.8385449569400E-01 2.4249529127700E-01 4.8415270057800E-01 -1.5630237443800E+00 6.5460142089800E-01 2.3854018446600E-02 +5.39787E+01 3.1026533517100E+02 5.0218572499800E-01 2.8589319549100E-02 3.9090261262100E-01 9.3535691353400E-01 9.2076314877000E-01 5.9733907204100E-02 1.1002096014000E+10 1.9156591373100E+09 8.0474571064700E-02 3.2173315347900E-01 9.1259664472900E-02 3.8872217293800E-01 2.3935186574200E-01 4.5511732836800E-01 -1.4174889070600E+00 6.3055166955800E-01 2.4065798570200E-02 +5.57058E+01 2.9165904364400E+02 4.9635275921000E-01 2.7964639250800E-02 3.7568954837900E-01 8.9359160072300E-01 8.8939679889500E-01 5.8753780246100E-02 1.1447574551500E+10 1.9876679565300E+09 6.7395003375500E-02 2.6641918291400E-01 7.6654601075000E-02 3.8129466100600E-01 2.4170014360500E-01 4.1387479564600E-01 -1.2893358809500E+00 6.1323786443800E-01 2.3817080014200E-02 +5.74333E+01 2.7243473325400E+02 4.8156679034700E-01 2.7315634329600E-02 3.6126991130100E-01 8.5376513250600E-01 8.4764818194500E-01 5.7030642915200E-02 1.1902644744200E+10 2.0689054385600E+09 5.6152428219000E-02 2.1977279896600E-01 6.4077891547900E-02 3.8694107677300E-01 2.3990559880100E-01 3.7392226852700E-01 -1.1873691553400E+00 5.8930268821700E-01 2.3465871756400E-02 +5.91608E+01 2.5694592690800E+02 4.5934223614900E-01 2.6688187542400E-02 3.4614731163500E-01 8.2275723034000E-01 8.1402029792200E-01 5.4554123240200E-02 1.1754670770100E+10 2.0519829454200E+09 4.9180744779400E-02 1.9321942462300E-01 5.6782481274100E-02 3.9397635456700E-01 2.3833822740400E-01 3.5598616972300E-01 -1.0954349459900E+00 5.6522064158000E-01 2.2924020250900E-02 +6.08878E+01 2.3777256312600E+02 4.4969467876000E-01 2.5464181789900E-02 3.3400472412200E-01 7.8362477452200E-01 7.8360566825500E-01 5.2757534822200E-02 1.2547189500000E+10 2.1981995641000E+09 3.9810656697400E-02 1.5317151501100E-01 4.6121703600100E-02 3.8757079350200E-01 2.3858315400100E-01 3.1098430664900E-01 -9.9476111054100E-01 5.4769640899000E-01 2.1988493491800E-02 +6.25537E+01 2.2176805105400E+02 4.2558749273800E-01 2.4653378661300E-02 3.2069505027200E-01 7.5703783055100E-01 7.5148218571100E-01 5.0233080364600E-02 1.2633803153200E+10 2.2224548589000E+09 3.3969702022000E-02 1.3191314887300E-01 4.0119376962400E-02 3.9732475999000E-01 2.3949097204200E-01 2.8769905722500E-01 -9.2150844155800E-01 5.2209693741000E-01 2.1195994537100E-02 +6.42811E+01 2.0315356776300E+02 4.0560176203500E-01 2.3563817743000E-02 3.0783687874000E-01 7.2231809993100E-01 7.0984275812000E-01 4.7831310526200E-02 1.3124989758500E+10 2.3167559760600E+09 2.7674145859000E-02 1.0614180061600E-01 3.3239994757500E-02 4.0768187654000E-01 2.4676833045900E-01 2.5421676261400E-01 -8.6524699158400E-01 4.9474400243800E-01 2.0338636445500E-02 +6.60081E+01 1.8677036934100E+02 3.8383013473900E-01 2.2588077085700E-02 2.9442718296600E-01 6.9633683152900E-01 6.8119645911000E-01 4.5863696570100E-02 1.2789418547600E+10 2.2659805470800E+09 2.3828737059300E-02 9.2620538012400E-02 2.8959853655100E-02 4.0717275819000E-01 2.5074221654000E-01 2.3845815767200E-01 -7.8191170937900E-01 4.6960413222900E-01 1.9427938415500E-02 +6.77351E+01 1.7165818041900E+02 3.5888648203900E-01 2.1800927367500E-02 2.8094374275700E-01 6.7078780240000E-01 6.4886007889700E-01 4.3163717464800E-02 1.2417095395400E+10 2.2271101849600E+09 2.0450879612500E-02 8.0343468170400E-02 2.5471521791800E-02 4.2056444549000E-01 2.5365821141500E-01 2.2359794369100E-01 -7.4078639908500E-01 4.4320990737400E-01 1.8663953543500E-02 +6.95244E+01 1.5375420083500E+02 3.4739896300000E-01 2.0574344884900E-02 2.6880220034400E-01 6.3845644761100E-01 6.1873405137200E-01 4.1068508330000E-02 1.2885611955000E+10 2.3267961753700E+09 1.6158473272500E-02 6.3250803191600E-02 2.0625449246600E-02 4.2376816275900E-01 2.6073438087600E-01 1.9312811285300E-01 -6.7212287735300E-01 4.2140138003500E-01 1.7712763071600E-02 +7.12519E+01 1.4005256088900E+02 3.2048834787300E-01 1.9861288245000E-02 2.5615534171200E-01 6.1522253153200E-01 5.8828282694800E-01 3.8433253196300E-02 1.2916318819000E+10 2.3912712169700E+09 1.3241244728600E-02 5.3035294090100E-02 1.7343049634600E-02 4.3643510534300E-01 2.6261823005000E-01 1.7369259835300E-01 -6.4908456602700E-01 3.9531458970900E-01 1.7019708844900E-02 +7.29789E+01 1.2434859054700E+02 3.0339106246200E-01 1.9060649331100E-02 2.4502930237400E-01 5.8683503303600E-01 5.5668349014700E-01 3.6862561744900E-02 1.3473573357200E+10 2.5599741549300E+09 1.0250590306500E-02 4.1115567524200E-02 1.3936863029400E-02 4.6452147621000E-01 2.6258525254200E-01 1.4704472449800E-01 -5.9938354123100E-01 3.7020104243400E-01 1.6440481372500E-02 +7.46585E+01 1.0892960645400E+02 2.7188394313800E-01 1.8449331288800E-02 2.3248492992800E-01 5.7288877174300E-01 5.2492417329600E-01 3.4653732075800E-02 1.3284823299600E+10 2.5439450306000E+09 8.1827973003100E-03 3.4675636274500E-02 1.1394703780300E-02 4.6610412601200E-01 2.7604770799600E-01 1.2950390553200E-01 -5.7419857588400E-01 3.3825860446200E-01 1.5864597807200E-02 +7.63859E+01 9.5178864433100E+01 2.4937225953700E-01 1.7926915125300E-02 2.1998740641700E-01 5.4880815319600E-01 4.9897885225200E-01 3.2298698307100E-02 1.2487448821700E+10 2.4672071492200E+09 6.7218770536200E-03 2.8752722459000E-02 9.6879945430700E-03 4.9313973718700E-01 2.8703616095400E-01 1.1748814614600E-01 -5.3852616701500E-01 3.1463373105800E-01 1.5367247219400E-02 +7.81609E+01 8.2340447931300E+01 2.1620761639100E-01 1.7660930836100E-02 2.0651778560900E-01 5.3117146722800E-01 4.6168240770600E-01 3.0621703988400E-02 1.3123092203600E+10 2.7276283622300E+09 4.8054121482700E-03 2.2559358518200E-02 7.4237570358300E-03 5.3703367549500E-01 2.8615842531600E-01 9.5220383538000E-02 -5.7217624573500E-01 2.7077848091100E-01 1.5431442282100E-02 +7.98884E+01 6.8281275015500E+01 1.8867439194000E-01 1.7030683051300E-02 1.9149371493100E-01 5.0839798053200E-01 4.3016884073900E-01 2.8423922517200E-02 1.2113549113600E+10 2.6211715175900E+09 3.6550802136300E-03 1.7925926026900E-02 5.9275031779300E-03 5.6567915595700E-01 2.8824529995400E-01 8.3088355623700E-02 -5.4749214127400E-01 2.4305772514500E-01 1.4859138203200E-02 +8.15767E+01 5.4472336943700E+01 1.4331849630200E-01 1.6575702766900E-02 1.7310403257700E-01 4.8374157752900E-01 3.9175770750800E-01 2.5443974484700E-02 1.1655512835000E+10 2.6753543076700E+09 2.4314511382800E-03 1.3298443997100E-02 4.2582446566400E-03 6.1742687532900E-01 2.7741524816700E-01 6.6844473212900E-02 -5.9343789093200E-01 2.0148043073400E-01 1.4401562934300E-02 +8.33430E+01 4.0650223382200E+01 1.0136181289700E-01 1.5402536123200E-02 1.4762816069600E-01 4.4569857148700E-01 3.4142911468500E-01 2.2261415051200E-02 1.1039319669300E+10 2.7702167161500E+09 1.3117952217400E-03 9.0920876998100E-03 2.6040534509000E-03 6.7595771736300E-01 2.7038621169100E-01 5.0172142945500E-02 -6.8774796218000E-01 1.3759696132200E-01 1.3848749710400E-02 +8.50712E+01 2.5203987686600E+01 4.7444236865700E-02 1.3232007723600E-02 1.1057756238200E-01 3.7522671548200E-01 2.7092927703800E-01 1.7296215940000E-02 8.7020618876500E+09 2.5541534143000E+09 5.1676828652800E-04 4.7938390658900E-03 1.1493908905300E-03 7.1661128383900E-01 2.5507790440300E-01 3.5325331574900E-02 -7.9326366953800E-01 6.8887947528100E-02 1.2195780995700E-02 +8.63660E+01 1.5424386826700E+01 1.4977437285700E-02 9.6772078146300E-03 7.2485884256900E-02 2.6978743301300E-01 1.8115448297600E-01 1.1928398382200E-02 6.8496387278100E+09 2.2405486509300E+09 1.5000347815300E-04 1.8562282673700E-03 3.5406704445100E-04 6.8561274475800E-01 2.1749241825900E-01 2.5140405217300E-02 -9.5490574931100E-01 2.0912754777200E-02 9.1410476845300E-03 +r m x_cg y_cg ri_x ri_y x_sh y_sh E G I_x I_y I_p k_x k_y A pitch x_e y_e +$2 51 +0.00000E+00 1.1895105466400E+03 -4.1985179888300E-03 -3.5059579962800E-03 1.8239678497000E+00 1.7652157267900E+00 -2.8895401584900E-03 -9.4599884510700E-03 1.2612377674200E+17 2.5268066213700E+18 4.9056946702000E+00 4.8374310003100E+00 1.0865806875700E+01 5.4521445328300E-01 7.0390231177000E-01 1.4102146887000E+00 0.0000000000000E+00 -4.8664183717200E-03 -3.2299906894700E-03 +2.01520E+00 1.1916429178100E+03 -5.4439618321400E-03 -3.6461930390600E-03 1.8246920921200E+00 1.7649629604400E+00 -3.5783050873700E-03 -9.6016500280400E-03 1.2641876417300E+17 2.5276482488700E+18 4.9182734570600E+00 4.8344692993600E+00 1.0870970474400E+01 5.4567075087300E-01 7.0296982118200E-01 1.4113489447500E+00 0.0000000000000E+00 -6.2728509253100E-03 -3.2995773596300E-03 +3.74238E+00 1.2027669426200E+03 -1.1758111526700E-02 -5.6973155683300E-03 1.8195763302200E+00 1.7597984568100E+00 -1.5968655690400E-03 -8.4783174736300E-03 1.2511695058500E+17 2.4801493132600E+18 5.0349891054500E+00 4.8856674936400E+00 1.1017030141900E+01 5.5044546998400E-01 6.9372627938000E-01 1.4452331796800E+00 0.0000000000000E+00 -6.1267365999800E-03 -4.1121893323100E-03 +5.46940E+00 1.1714868441700E+03 -1.7286160405900E-02 -5.4086717673700E-03 1.7926990918500E+00 1.7476318690300E+00 6.2532797039800E-03 4.9543704158200E-03 1.2321252010200E+17 2.4282199177700E+18 4.8815650646700E+00 4.7142444976900E+00 1.0540919531300E+01 5.6143422215200E-01 6.7388619361400E-01 1.4329520800800E+00 0.0000000000000E+00 -1.6068469122500E-02 -4.4695825596400E-03 +7.19645E+00 1.1136234106900E+03 -1.4259188108700E-03 -8.2311449642400E-03 1.7357347382100E+00 1.7215038179700E+00 3.7378926346100E-02 1.1112603033500E-02 1.1441437746400E+17 2.2083100352200E+18 4.7682804461900E+00 4.6362962060300E+00 1.0026180334600E+01 5.7007255711400E-01 6.4038771972200E-01 1.4725978390700E+00 0.0000000000000E+00 1.3534924741700E-02 -5.2457557582700E-03 +8.92350E+00 1.0493102458700E+03 1.9160353190000E-02 -3.6385611942200E-03 1.6187141969400E+00 1.7196128050300E+00 1.1215493675900E-01 3.7069214029500E-02 1.0953450524200E+17 2.0868082277200E+18 4.0264371864700E+00 4.6436692842000E+00 8.8126320170900E+00 5.8572771871500E-01 5.8474462805300E-01 1.4571870194300E+00 -4.2803954889000E+01 4.0854186052500E-02 2.5093784189100E-03 +1.06503E+01 9.7462848090200E+02 9.8114665200400E-02 3.9630065014200E-03 1.5141873722800E+00 1.6657315692800E+00 2.9087418866400E-01 6.7433683939400E-02 1.0162502747900E+17 1.9020671355100E+18 3.5220808760200E+00 4.3235011648200E+00 7.3444508605600E+00 5.9391478638900E-01 5.2456502342500E-01 1.4591505745600E+00 -3.5909397310600E+01 1.3650631459200E-01 8.0682858054300E-03 +1.23760E+01 9.0874188779200E+02 1.5616383151500E-01 1.2428562115700E-02 1.3837416540400E+00 1.6318286880200E+00 4.9930990502200E-01 1.0014631816500E-01 9.6832117771700E+17 1.7856338288700E+18 2.9318695502800E+00 3.9106762301900E+00 5.6566008359900E+00 5.9136688872300E-01 4.5989050216400E-01 1.4303853381000E+00 -2.5736828258200E+01 2.0410746845700E-01 1.0987633438700E-02 +1.41042E+01 8.6887170142100E+02 2.5432851905800E-01 2.2064361519000E-02 1.2498165019500E+00 1.6077096253100E+00 7.5432071385600E-01 9.1496208003100E-02 9.3376424008600E+17 1.7097395998800E+18 2.4300281807800E+00 3.6162439463100E+00 4.3560430788700E+00 5.9542698629100E-01 4.0705105372900E-01 1.4194826514100E+00 -1.8926894413700E+01 3.1035806756800E-01 1.6420291103700E-02 +1.55442E+01 8.4550719319400E+02 3.2170368269200E-01 3.0507448249400E-02 1.1537727157400E+00 1.5998849395600E+00 9.3458641142400E-01 9.6038546189200E-02 9.3746485006800E+17 1.7394229625100E+18 2.0400109391700E+00 3.3885411823800E+00 3.4656518118700E+00 6.1269749974900E-01 3.6363000707500E-01 1.3756561435000E+00 -1.4276252536400E+01 3.8590948942100E-01 2.2740417083000E-02 +1.76981E+01 7.7515195107600E+02 3.8517605913000E-01 3.1942486935800E-02 1.0508761988200E+00 1.5921104723900E+00 1.0894866416300E+00 1.0366186145400E-01 8.6246328910300E+17 1.5898274708000E+18 1.7144833017400E+00 3.1887681795700E+00 2.5486377473300E+00 5.7799102630800E-01 3.3667702381200E-01 1.3549343620400E+00 -1.0973805967700E+01 4.8371396728700E-01 2.1677729468100E-02 +1.94317E+01 7.3579357111000E+02 4.2548071931400E-01 3.8076049352800E-02 9.9323124019200E-01 1.5986484910800E+00 1.0923477168000E+00 1.2220059333200E-01 8.4376031857100E+17 1.5622631522900E+18 1.4998016708300E+00 3.0084313150500E+00 2.1448120841500E+00 5.4299760560600E-01 3.3338347052900E-01 1.3050199458400E+00 -8.8682456551000E+00 5.5044270832900E-01 2.8664302238300E-02 +2.11593E+01 6.9112424644200E+02 4.8108386833600E-01 4.1360037938300E-02 9.4504647784500E-01 1.5872617993100E+00 1.1711384993500E+00 1.2246496451800E-01 8.1292628977100E+17 1.5034440604600E+18 1.3295048603000E+00 2.8210023370100E+00 1.7545586776000E+00 4.9797234889900E-01 3.2453724039100E-01 1.2632075310200E+00 -7.6219379753200E+00 6.2079350008200E-01 3.3419770972600E-02 +2.28863E+01 6.5485249686100E+02 5.3665382110900E-01 4.2137537761300E-02 9.0128602446900E-01 1.5724045270000E+00 1.2376736186900E+00 1.1794893100500E-01 7.8498149282600E+17 1.4507906976400E+18 1.1889084903900E+00 2.6301339414700E+00 1.4605979748100E+00 4.5613549318700E-01 3.1932666461700E-01 1.2304533069300E+00 -6.7895828161400E+00 6.9634716663300E-01 3.5356670241700E-02 +2.46133E+01 6.2587614782200E+02 5.8576678860100E-01 4.0679791544700E-02 8.6025641350000E-01 1.5524732566900E+00 1.2881154754400E+00 1.1210429913100E-01 7.6933178861900E+17 1.4225156639900E+18 1.0578734005100E+00 2.4399605512900E+00 1.2257810999800E+00 4.2256751805400E-01 3.1597384318900E-01 1.1939057439300E+00 -6.0902950485800E+00 7.5899794347000E-01 3.4529849533400E-02 +2.63408E+01 5.9332091893200E+02 5.7517768080200E-01 3.6891876639700E-02 8.1276558845400E-01 1.5640192563800E+00 1.3139169904200E+00 9.8433717979000E-02 7.6801369935100E+17 1.4137418986000E+18 8.9619478847000E-01 2.4418499749200E+00 1.0034870108200E+00 3.8226251665900E-01 3.1285484941500E-01 1.1343717277200E+00 -4.8934018236900E+00 7.3457335515000E-01 3.0757297066400E-02 +2.80683E+01 5.8096905879300E+02 5.8854668456400E-01 2.9768978963500E-02 7.7159426575900E-01 1.5348937388700E+00 1.3092580439700E+00 8.4350335478200E-02 7.7520776168100E+17 1.4243280889400E+18 7.8601319966200E-01 2.2784834466600E+00 8.7234564660600E-01 3.8268852091900E-01 3.0914334076600E-01 1.1038716341600E+00 -4.5298176588900E+00 7.5377195335800E-01 2.3493526461900E-02 +2.97953E+01 5.6622541685800E+02 6.0654184080900E-01 2.3289398965700E-02 7.3412215492400E-01 1.5023186594600E+00 1.3212879161700E+00 7.2340315434200E-02 7.8326619567900E+17 1.4301581099500E+18 6.8907669599700E-01 2.1077878368500E+00 7.6182657625000E-01 3.7542080694600E-01 3.0417528738000E-01 1.0702895223200E+00 -4.2521269588800E+00 7.7214298518400E-01 1.6751574941300E-02 +3.15229E+01 5.4823508892400E+02 6.1111223612500E-01 1.9130220898200E-02 7.0103020485900E-01 1.4623267092100E+00 1.3075290992600E+00 6.2938322874400E-02 8.1438316792900E+17 1.4815984381600E+18 5.8915261340800E-01 1.8473935328800E+00 6.4921957366900E-01 3.7889235537100E-01 2.9906427280000E-01 1.0059235340500E+00 -4.1030514815000E+00 7.9059797007900E-01 1.2354001170100E-02 +3.32504E+01 5.2964795864300E+02 6.2690400552300E-01 1.7508798074100E-02 6.7070431671600E-01 1.4183325249000E+00 1.2971825957300E+00 5.9176115243200E-02 8.1818776927200E+17 1.4772064299300E+18 5.2076229459300E-01 1.6545749806600E+00 5.6422421516700E-01 3.7379957050200E-01 2.9254145554400E-01 9.7204568400300E-01 -3.9262195332800E+00 8.0974480166700E-01 1.0611658804800E-02 +3.49775E+01 5.1031210665500E+02 6.3366440974700E-01 1.7495930149000E-02 6.4213570138000E-01 1.3798399676600E+00 1.2795825800800E+00 5.7574436616200E-02 8.6793220676500E+17 1.5620724504800E+18 4.3673212852600E-01 1.4318972361600E+00 4.7662555406300E-01 3.7629336902300E-01 2.8519648937000E-01 8.9453603388800E-01 -3.6506648817600E+00 8.0991314764700E-01 1.0740837050400E-02 +3.67050E+01 4.9468140090000E+02 6.2123062547100E-01 1.8536510979800E-02 6.1228572663700E-01 1.3436783853200E+00 1.2484738075900E+00 5.7772072891500E-02 8.7529878155200E+17 1.5711576555200E+18 3.8274029960300E-01 1.3113597835600E+00 4.1649750890700E-01 3.7797325768400E-01 2.7764941463000E-01 8.6314937587800E-01 -3.3504185092000E+00 7.9421888660900E-01 1.1863118684300E-02 +3.84325E+01 4.7751441090300E+02 6.1671457751500E-01 1.9790956392400E-02 5.8437517334000E-01 1.3017235613400E+00 1.2256416038900E+00 5.8799485883500E-02 8.8203174131900E+17 1.5722320855600E+18 3.3504952587100E-01 1.1836269637700E+00 3.6305491220100E-01 3.7080604891300E-01 2.7289462387300E-01 8.3078430157300E-01 -3.0923243167700E+00 7.8313822714900E-01 1.3233202666400E-02 +4.00731E+01 4.6092902978900E+02 5.9933713524900E-01 2.1499292267500E-02 5.5880729667000E-01 1.2663977261800E+00 1.1895786347800E+00 5.9352791736300E-02 8.9718642781600E+17 1.5934954366400E+18 2.9181221254300E-01 1.0553058645900E+00 3.1559423319700E-01 3.7341587272400E-01 2.6740864174400E-01 7.9230514231500E-01 -2.8861283729100E+00 7.6830015589200E-01 1.4989825736300E-02 +4.18008E+01 4.4177737386800E+02 5.8521412152000E-01 2.3238890882000E-02 5.3355764822500E-01 1.2237039468600E+00 1.1586826634600E+00 6.0484715159600E-02 9.1464745748000E+17 1.6199735159300E+18 2.5105945957200E-01 9.2960365503900E-01 2.7357637895900E-01 3.7847979594800E-01 2.5931734525900E-01 7.4925536690300E-01 -2.6458203363900E+00 7.5440965368000E-01 1.6914070361900E-02 +4.35282E+01 4.2533330680600E+02 5.6647290694600E-01 2.5038621071400E-02 5.0861214711000E-01 1.1893969175300E+00 1.1275191804000E+00 6.1099296165700E-02 9.2998497900600E+17 1.6443314869100E+18 2.1660221033800E-01 8.2839522065800E-01 2.3830002783500E-01 3.8130545192800E-01 2.5509220441600E-01 7.1224347118200E-01 -2.4107022019400E+00 7.3493460170100E-01 1.8856303151100E-02 +4.52552E+01 4.0138217955200E+02 5.7444515585500E-01 2.5974427155900E-02 4.8773023818400E-01 1.1342513537900E+00 1.0934861417500E+00 6.2102016462500E-02 9.6457837632900E+17 1.6924819059400E+18 1.8211091067100E-01 6.8882331753400E-01 1.9962295090900E-01 3.7753153600800E-01 2.5507269892700E-01 6.5398008499400E-01 -2.2552213782300E+00 7.3032423476100E-01 2.0210357373600E-02 +4.69828E+01 3.8514411819300E+02 5.5420965093100E-01 2.7297706814300E-02 4.6512977172000E-01 1.1000699967100E+00 1.0606980084900E+00 6.2125185857600E-02 9.6189475979500E+17 1.6874926857600E+18 1.5956937399400E-01 6.2097034756000E-01 1.7605036984100E-01 3.8113422151800E-01 2.4807945838600E-01 6.2984928542800E-01 -2.0470280641600E+00 7.0793251882400E-01 2.1719431242200E-02 +4.87103E+01 3.6594790812300E+02 5.4723168319200E-01 2.7952078566000E-02 4.4551193684300E-01 1.0576837827400E+00 1.0269209921700E+00 6.2227159762100E-02 1.0275011731700E+17 1.7997546392900E+18 1.3095617095600E-01 5.1863014230200E-01 1.4668567008700E-01 3.8479968177700E-01 2.4666334633300E-01 5.6682976910800E-01 -1.8549527174500E+00 6.8881859187800E-01 2.2754297636900E-02 +5.04373E+01 3.4693731101900E+02 5.3134340799200E-01 2.8479011326000E-02 4.2617250498700E-01 1.0189764767900E+00 9.9204116032600E-01 6.1995972176000E-02 1.0176537170300E+17 1.7709430860300E+18 1.1486441641000E-01 4.5882376408800E-01 1.2714040569300E-01 3.7947637279200E-01 2.4259098121100E-01 5.4336643423200E-01 -1.6958849515400E+00 6.7001496356200E-01 2.3466626259100E-02 +5.22512E+01 3.2632244339000E+02 5.2484510263200E-01 2.8492484166200E-02 4.0849418845600E-01 9.6685376535200E-01 9.5441803296500E-01 6.1092856242200E-02 1.0847391413500E+17 1.8892620158100E+18 9.3582260807700E-02 3.6796062727700E-01 1.0504767312700E-01 3.8385449569400E-01 2.4249529127700E-01 4.8415270057800E-01 -1.5630237443800E+00 6.5460142089800E-01 2.3854018446600E-02 +5.39787E+01 3.1026533517100E+02 5.0218572499800E-01 2.8589319549100E-02 3.9090261262100E-01 9.3535691353400E-01 9.2076314877000E-01 5.9733907204100E-02 1.1002096014000E+17 1.9156591373100E+18 8.0474571064700E-02 3.2173315347900E-01 9.1259664472900E-02 3.8872217293800E-01 2.3935186574200E-01 4.5511732836800E-01 -1.4174889070600E+00 6.3055166955800E-01 2.4065798570200E-02 +5.57058E+01 2.9165904364400E+02 4.9635275921000E-01 2.7964639250800E-02 3.7568954837900E-01 8.9359160072300E-01 8.8939679889500E-01 5.8753780246100E-02 1.1447574551500E+17 1.9876679565300E+18 6.7395003375500E-02 2.6641918291400E-01 7.6654601075000E-02 3.8129466100600E-01 2.4170014360500E-01 4.1387479564600E-01 -1.2893358809500E+00 6.1323786443800E-01 2.3817080014200E-02 +5.74333E+01 2.7243473325400E+02 4.8156679034700E-01 2.7315634329600E-02 3.6126991130100E-01 8.5376513250600E-01 8.4764818194500E-01 5.7030642915200E-02 1.1902644744200E+17 2.0689054385600E+18 5.6152428219000E-02 2.1977279896600E-01 6.4077891547900E-02 3.8694107677300E-01 2.3990559880100E-01 3.7392226852700E-01 -1.1873691553400E+00 5.8930268821700E-01 2.3465871756400E-02 +5.91608E+01 2.5694592690800E+02 4.5934223614900E-01 2.6688187542400E-02 3.4614731163500E-01 8.2275723034000E-01 8.1402029792200E-01 5.4554123240200E-02 1.1754670770100E+17 2.0519829454200E+18 4.9180744779400E-02 1.9321942462300E-01 5.6782481274100E-02 3.9397635456700E-01 2.3833822740400E-01 3.5598616972300E-01 -1.0954349459900E+00 5.6522064158000E-01 2.2924020250900E-02 +6.08878E+01 2.3777256312600E+02 4.4969467876000E-01 2.5464181789900E-02 3.3400472412200E-01 7.8362477452200E-01 7.8360566825500E-01 5.2757534822200E-02 1.2547189500000E+17 2.1981995641000E+18 3.9810656697400E-02 1.5317151501100E-01 4.6121703600100E-02 3.8757079350200E-01 2.3858315400100E-01 3.1098430664900E-01 -9.9476111054100E-01 5.4769640899000E-01 2.1988493491800E-02 +6.25537E+01 2.2176805105400E+02 4.2558749273800E-01 2.4653378661300E-02 3.2069505027200E-01 7.5703783055100E-01 7.5148218571100E-01 5.0233080364600E-02 1.2633803153200E+17 2.2224548589000E+18 3.3969702022000E-02 1.3191314887300E-01 4.0119376962400E-02 3.9732475999000E-01 2.3949097204200E-01 2.8769905722500E-01 -9.2150844155800E-01 5.2209693741000E-01 2.1195994537100E-02 +6.42811E+01 2.0315356776300E+02 4.0560176203500E-01 2.3563817743000E-02 3.0783687874000E-01 7.2231809993100E-01 7.0984275812000E-01 4.7831310526200E-02 1.3124989758500E+17 2.3167559760600E+18 2.7674145859000E-02 1.0614180061600E-01 3.3239994757500E-02 4.0768187654000E-01 2.4676833045900E-01 2.5421676261400E-01 -8.6524699158400E-01 4.9474400243800E-01 2.0338636445500E-02 +6.60081E+01 1.8677036934100E+02 3.8383013473900E-01 2.2588077085700E-02 2.9442718296600E-01 6.9633683152900E-01 6.8119645911000E-01 4.5863696570100E-02 1.2789418547600E+17 2.2659805470800E+18 2.3828737059300E-02 9.2620538012400E-02 2.8959853655100E-02 4.0717275819000E-01 2.5074221654000E-01 2.3845815767200E-01 -7.8191170937900E-01 4.6960413222900E-01 1.9427938415500E-02 +6.77351E+01 1.7165818041900E+02 3.5888648203900E-01 2.1800927367500E-02 2.8094374275700E-01 6.7078780240000E-01 6.4886007889700E-01 4.3163717464800E-02 1.2417095395400E+17 2.2271101849600E+18 2.0450879612500E-02 8.0343468170400E-02 2.5471521791800E-02 4.2056444549000E-01 2.5365821141500E-01 2.2359794369100E-01 -7.4078639908500E-01 4.4320990737400E-01 1.8663953543500E-02 +6.95244E+01 1.5375420083500E+02 3.4739896300000E-01 2.0574344884900E-02 2.6880220034400E-01 6.3845644761100E-01 6.1873405137200E-01 4.1068508330000E-02 1.2885611955000E+17 2.3267961753700E+18 1.6158473272500E-02 6.3250803191600E-02 2.0625449246600E-02 4.2376816275900E-01 2.6073438087600E-01 1.9312811285300E-01 -6.7212287735300E-01 4.2140138003500E-01 1.7712763071600E-02 +7.12519E+01 1.4005256088900E+02 3.2048834787300E-01 1.9861288245000E-02 2.5615534171200E-01 6.1522253153200E-01 5.8828282694800E-01 3.8433253196300E-02 1.2916318819000E+17 2.3912712169700E+18 1.3241244728600E-02 5.3035294090100E-02 1.7343049634600E-02 4.3643510534300E-01 2.6261823005000E-01 1.7369259835300E-01 -6.4908456602700E-01 3.9531458970900E-01 1.7019708844900E-02 +7.29789E+01 1.2434859054700E+02 3.0339106246200E-01 1.9060649331100E-02 2.4502930237400E-01 5.8683503303600E-01 5.5668349014700E-01 3.6862561744900E-02 1.3473573357200E+17 2.5599741549300E+18 1.0250590306500E-02 4.1115567524200E-02 1.3936863029400E-02 4.6452147621000E-01 2.6258525254200E-01 1.4704472449800E-01 -5.9938354123100E-01 3.7020104243400E-01 1.6440481372500E-02 +7.46585E+01 1.0892960645400E+02 2.7188394313800E-01 1.8449331288800E-02 2.3248492992800E-01 5.7288877174300E-01 5.2492417329600E-01 3.4653732075800E-02 1.3284823299600E+17 2.5439450306000E+18 8.1827973003100E-03 3.4675636274500E-02 1.1394703780300E-02 4.6610412601200E-01 2.7604770799600E-01 1.2950390553200E-01 -5.7419857588400E-01 3.3825860446200E-01 1.5864597807200E-02 +7.63859E+01 9.5178864433100E+01 2.4937225953700E-01 1.7926915125300E-02 2.1998740641700E-01 5.4880815319600E-01 4.9897885225200E-01 3.2298698307100E-02 1.2487448821700E+17 2.4672071492200E+18 6.7218770536200E-03 2.8752722459000E-02 9.6879945430700E-03 4.9313973718700E-01 2.8703616095400E-01 1.1748814614600E-01 -5.3852616701500E-01 3.1463373105800E-01 1.5367247219400E-02 +7.81609E+01 8.2340447931300E+01 2.1620761639100E-01 1.7660930836100E-02 2.0651778560900E-01 5.3117146722800E-01 4.6168240770600E-01 3.0621703988400E-02 1.3123092203600E+17 2.7276283622300E+18 4.8054121482700E-03 2.2559358518200E-02 7.4237570358300E-03 5.3703367549500E-01 2.8615842531600E-01 9.5220383538000E-02 -5.7217624573500E-01 2.7077848091100E-01 1.5431442282100E-02 +7.98884E+01 6.8281275015500E+01 1.8867439194000E-01 1.7030683051300E-02 1.9149371493100E-01 5.0839798053200E-01 4.3016884073900E-01 2.8423922517200E-02 1.2113549113600E+17 2.6211715175900E+18 3.6550802136300E-03 1.7925926026900E-02 5.9275031779300E-03 5.6567915595700E-01 2.8824529995400E-01 8.3088355623700E-02 -5.4749214127400E-01 2.4305772514500E-01 1.4859138203200E-02 +8.15767E+01 5.4472336943700E+01 1.4331849630200E-01 1.6575702766900E-02 1.7310403257700E-01 4.8374157752900E-01 3.9175770750800E-01 2.5443974484700E-02 1.1655512835000E+17 2.6753543076700E+18 2.4314511382800E-03 1.3298443997100E-02 4.2582446566400E-03 6.1742687532900E-01 2.7741524816700E-01 6.6844473212900E-02 -5.9343789093200E-01 2.0148043073400E-01 1.4401562934300E-02 +8.33430E+01 4.0650223382200E+01 1.0136181289700E-01 1.5402536123200E-02 1.4762816069600E-01 4.4569857148700E-01 3.4142911468500E-01 2.2261415051200E-02 1.1039319669300E+17 2.7702167161500E+18 1.3117952217400E-03 9.0920876998100E-03 2.6040534509000E-03 6.7595771736300E-01 2.7038621169100E-01 5.0172142945500E-02 -6.8774796218000E-01 1.3759696132200E-01 1.3848749710400E-02 +8.50712E+01 2.5203987686600E+01 4.7444236865700E-02 1.3232007723600E-02 1.1057756238200E-01 3.7522671548200E-01 2.7092927703800E-01 1.7296215940000E-02 8.7020618876500E+17 2.5541534143000E+18 5.1676828652800E-04 4.7938390658900E-03 1.1493908905300E-03 7.1661128383900E-01 2.5507790440300E-01 3.5325331574900E-02 -7.9326366953800E-01 6.8887947528100E-02 1.2195780995700E-02 +8.63660E+01 1.5424386826700E+01 1.4977437285700E-02 9.6772078146300E-03 7.2485884256900E-02 2.6978743301300E-01 1.8115448297600E-01 1.1928398382200E-02 6.8496387278100E+17 2.2405486509300E+18 1.5000347815300E-04 1.8562282673700E-03 3.5406704445100E-04 6.8561274475800E-01 2.1749241825900E-01 2.5140405217300E-02 -9.5490574931100E-01 2.0912754777200E-02 9.1410476845300E-03 \ No newline at end of file diff --git a/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Hub_st.dat b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Hub_st.dat new file mode 100644 index 0000000..8acaee9 --- /dev/null +++ b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Hub_st.dat @@ -0,0 +1,9 @@ +#1 Hub Changed 5.11.2012 by MHHA: Mass per unit-length should not be too low +r m x_cg y_cg ri_x ri_y x_sh y_sh E G I_x I_y I_p k_x k_y A pitch x_e y_e +$1 2 hub. flexible +0 1.0 0 0 1.50E+00 1.50E+00 0 0 2.10E+11 8.08E+10 5.52E-00 5.52E-00 1.10E+00 0.5 0.5 2.98E-01 0 0 0 +2.8 1.0 0 0 1.50E+00 1.50E+00 0 0 2.10E+11 8.08E+10 5.52E-00 5.52E-00 1.10E+00 0.5 0.5 2.98E-01 0 0 0 +r m x_cg y_cg ri_x ri_y x_sh y_sh E G I_x I_y I_p k_x k_y A pitch x_e y_e +$2 2 hub. stiff +0 1.0 0 0 1.50E+00 1.50E+00 0 0 2.10E+16 8.08E+15 5.52E-00 5.52E-00 1.10E+00 0.5 0.5 2.98E-01 0 0 0 +2.8 1.0 0 0 1.50E+00 1.50E+00 0 0 2.10E+16 8.08E+15 5.52E-00 5.52E-00 1.10E+00 0.5 0.5 2.98E-01 0 0 0 diff --git a/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Shaft_st.dat b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Shaft_st.dat new file mode 100644 index 0000000..f5bf167 --- /dev/null +++ b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Shaft_st.dat @@ -0,0 +1,10 @@ +#1 Shaft +r m x_cg y_cg ri_x ri_y x_sh y_sh E G I_x I_y I_p k_x k_y A pitch x_e y_e +$1 2 shaft with hub mass on last element. flexible +0.0 1.00E+00 0 0 0.2 0.2 0 0 2.10E+11 8.08E+10 1.00E+00 1.00E+00 0.2036 0.5 0.5 10 0 0 0 +7.1 1.00E+00 0 0 0.2 0.2 0 0 2.10E+11 8.08E+10 1.00E+00 1.00E+00 0.2036 0.5 0.5 10 0 0 0 +r m x_cg y_cg ri_x ri_y x_sh y_sh E G I_x I_y I_p k_x k_y A pitch x_e y_e +$2 2 shaft with hub mass on last element. stiff +0.0 1.00E+00 0 0 0.2 0.2 0 0 2.10E+16 8.08E+17 1.00E+00 1.00E+00 0.2036 0.5 0.5 10 0 0 0 +7.1 1.00E+00 0 0 0.2 0.2 0 0 2.10E+16 8.08E+17 1.00E+00 1.00E+00 0.2036 0.5 0.5 10 0 0 0 + diff --git a/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Tower_st.dat b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Tower_st.dat new file mode 100644 index 0000000..b4f969b --- /dev/null +++ b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Tower_st.dat @@ -0,0 +1,44 @@ +#1 Tower made by anyd 25.02.2013 +r m x_cg y_cg ri_x ri_y x_sh y_sh E G I_x I_y I_p k_x k_y A pitch x_e y_e +$1 20 +0.000 8.3837E+03 0.0000E+00 0.0000E+00 2.9211E+00 2.9211E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 8.4160E+00 8.4160E+00 1.6832E+01 5.0000E-01 5.0000E-01 9.8632E-01 0.0000E+00 0.0000E+00 0.0000E+00 +11.500 8.1012E+03 0.0000E+00 0.0000E+00 2.8226E+00 2.8226E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 7.5934E+00 7.5934E+00 1.5187E+01 5.0000E-01 5.0000E-01 9.5308E-01 0.0000E+00 0.0000E+00 0.0000E+00 +11.501 7.6767E+03 0.0000E+00 0.0000E+00 2.8233E+00 2.8233E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 7.1991E+00 7.1991E+00 1.4398E+01 5.0000E-01 5.0000E-01 9.0314E-01 0.0000E+00 0.0000E+00 0.0000E+00 +23.000 7.4090E+03 0.0000E+00 0.0000E+00 2.7249E+00 2.7249E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 6.4720E+00 6.4720E+00 1.2944E+01 5.0000E-01 5.0000E-01 8.7165E-01 0.0000E+00 0.0000E+00 0.0000E+00 +23.001 6.9992E+03 0.0000E+00 0.0000E+00 2.7256E+00 2.7256E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 6.1171E+00 6.1171E+00 1.2234E+01 5.0000E-01 5.0000E-01 8.2343E-01 0.0000E+00 0.0000E+00 0.0000E+00 +34.500 6.7464E+03 0.0000E+00 0.0000E+00 2.6271E+00 2.6271E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 5.4779E+00 5.4779E+00 1.0956E+01 5.0000E-01 5.0000E-01 7.9369E-01 0.0000E+00 0.0000E+00 0.0000E+00 +34.501 6.3512E+03 0.0000E+00 0.0000E+00 2.6278E+00 2.6278E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 5.1598E+00 5.1598E+00 1.0320E+01 5.0000E-01 5.0000E-01 7.4720E-01 0.0000E+00 0.0000E+00 0.0000E+00 +46.000 6.1133E+03 0.0000E+00 0.0000E+00 2.5294E+00 2.5294E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 4.6013E+00 4.6013E+00 9.2027E+00 5.0000E-01 5.0000E-01 7.1921E-01 0.0000E+00 0.0000E+00 0.0000E+00 +46.001 5.7328E+03 0.0000E+00 0.0000E+00 2.5301E+00 2.5301E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 4.3173E+00 4.3173E+00 8.6346E+00 5.0000E-01 5.0000E-01 6.7444E-01 0.0000E+00 0.0000E+00 0.0000E+00 +57.500 5.5097E+03 0.0000E+00 0.0000E+00 2.4316E+00 2.4316E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 3.8327E+00 3.8327E+00 7.6654E+00 5.0000E-01 5.0000E-01 6.4820E-01 0.0000E+00 0.0000E+00 0.0000E+00 +57.501 5.1439E+03 0.0000E+00 0.0000E+00 2.4323E+00 2.4323E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 3.5803E+00 3.5803E+00 7.1605E+00 5.0000E-01 5.0000E-01 6.0516E-01 0.0000E+00 0.0000E+00 0.0000E+00 +69.000 4.9357E+03 0.0000E+00 0.0000E+00 2.3339E+00 2.3339E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 3.1629E+00 3.1629E+00 6.3258E+00 5.0000E-01 5.0000E-01 5.8067E-01 0.0000E+00 0.0000E+00 0.0000E+00 +69.001 4.5845E+03 0.0000E+00 0.0000E+00 2.3346E+00 2.3346E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 2.9396E+00 2.9396E+00 5.8792E+00 5.0000E-01 5.0000E-01 5.3935E-01 0.0000E+00 0.0000E+00 0.0000E+00 +80.500 4.3912E+03 0.0000E+00 0.0000E+00 2.2361E+00 2.2361E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 2.5832E+00 2.5832E+00 5.1664E+00 5.0000E-01 5.0000E-01 5.1661E-01 0.0000E+00 0.0000E+00 0.0000E+00 +80.501 4.0547E+03 0.0000E+00 0.0000E+00 2.2368E+00 2.2368E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 2.3867E+00 2.3867E+00 4.7734E+00 5.0000E-01 5.0000E-01 4.7702E-01 0.0000E+00 0.0000E+00 0.0000E+00 +92.000 3.8762E+03 0.0000E+00 0.0000E+00 2.1384E+00 2.1384E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 2.0852E+00 2.0852E+00 4.1705E+00 5.0000E-01 5.0000E-01 4.5602E-01 0.0000E+00 0.0000E+00 0.0000E+00 +92.001 3.5543E+03 0.0000E+00 0.0000E+00 2.1391E+00 2.1391E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 1.9133E+00 1.9133E+00 3.8267E+00 5.0000E-01 5.0000E-01 4.1816E-01 0.0000E+00 0.0000E+00 0.0000E+00 +103.500 3.3908E+03 0.0000E+00 0.0000E+00 2.0406E+00 2.0406E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 1.6611E+00 1.6611E+00 3.3223E+00 5.0000E-01 5.0000E-01 3.9891E-01 0.0000E+00 0.0000E+00 0.0000E+00 +103.501 3.0836E+03 0.0000E+00 0.0000E+00 2.0413E+00 2.0413E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 1.5117E+00 1.5117E+00 3.0234E+00 5.0000E-01 5.0000E-01 3.6277E-01 0.0000E+00 0.0000E+00 0.0000E+00 +115.630 2.9267E+03 0.0000E+00 0.0000E+00 1.9375E+00 1.9375E+00 0.0000E+00 0.0000E+00 2.1000E+11 8.0769E+10 1.2925E+00 1.2925E+00 2.5850E+00 5.0000E-01 5.0000E-01 3.4432E-01 0.0000E+00 0.0000E+00 0.0000E+00 +$2 20 +0.000 8.3837E+03 0.0000E+00 0.0000E+00 2.9211E+00 2.9211E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 8.4160E+00 8.4160E+00 1.6832E+01 5.0000E-01 5.0000E-01 9.8632E-01 0.0000E+00 0.0000E+00 0.0000E+00 +11.500 8.1012E+03 0.0000E+00 0.0000E+00 2.8226E+00 2.8226E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 7.5934E+00 7.5934E+00 1.5187E+01 5.0000E-01 5.0000E-01 9.5308E-01 0.0000E+00 0.0000E+00 0.0000E+00 +11.501 7.6767E+03 0.0000E+00 0.0000E+00 2.8233E+00 2.8233E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 7.1991E+00 7.1991E+00 1.4398E+01 5.0000E-01 5.0000E-01 9.0314E-01 0.0000E+00 0.0000E+00 0.0000E+00 +23.000 7.4090E+03 0.0000E+00 0.0000E+00 2.7249E+00 2.7249E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 6.4720E+00 6.4720E+00 1.2944E+01 5.0000E-01 5.0000E-01 8.7165E-01 0.0000E+00 0.0000E+00 0.0000E+00 +23.001 6.9992E+03 0.0000E+00 0.0000E+00 2.7256E+00 2.7256E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 6.1171E+00 6.1171E+00 1.2234E+01 5.0000E-01 5.0000E-01 8.2343E-01 0.0000E+00 0.0000E+00 0.0000E+00 +34.500 6.7464E+03 0.0000E+00 0.0000E+00 2.6271E+00 2.6271E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 5.4779E+00 5.4779E+00 1.0956E+01 5.0000E-01 5.0000E-01 7.9369E-01 0.0000E+00 0.0000E+00 0.0000E+00 +34.501 6.3512E+03 0.0000E+00 0.0000E+00 2.6278E+00 2.6278E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 5.1598E+00 5.1598E+00 1.0320E+01 5.0000E-01 5.0000E-01 7.4720E-01 0.0000E+00 0.0000E+00 0.0000E+00 +46.000 6.1133E+03 0.0000E+00 0.0000E+00 2.5294E+00 2.5294E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 4.6013E+00 4.6013E+00 9.2027E+00 5.0000E-01 5.0000E-01 7.1921E-01 0.0000E+00 0.0000E+00 0.0000E+00 +46.001 5.7328E+03 0.0000E+00 0.0000E+00 2.5301E+00 2.5301E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 4.3173E+00 4.3173E+00 8.6346E+00 5.0000E-01 5.0000E-01 6.7444E-01 0.0000E+00 0.0000E+00 0.0000E+00 +57.500 5.5097E+03 0.0000E+00 0.0000E+00 2.4316E+00 2.4316E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 3.8327E+00 3.8327E+00 7.6654E+00 5.0000E-01 5.0000E-01 6.4820E-01 0.0000E+00 0.0000E+00 0.0000E+00 +57.501 5.1439E+03 0.0000E+00 0.0000E+00 2.4323E+00 2.4323E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 3.5803E+00 3.5803E+00 7.1605E+00 5.0000E-01 5.0000E-01 6.0516E-01 0.0000E+00 0.0000E+00 0.0000E+00 +69.000 4.9357E+03 0.0000E+00 0.0000E+00 2.3339E+00 2.3339E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 3.1629E+00 3.1629E+00 6.3258E+00 5.0000E-01 5.0000E-01 5.8067E-01 0.0000E+00 0.0000E+00 0.0000E+00 +69.001 4.5845E+03 0.0000E+00 0.0000E+00 2.3346E+00 2.3346E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 2.9396E+00 2.9396E+00 5.8792E+00 5.0000E-01 5.0000E-01 5.3935E-01 0.0000E+00 0.0000E+00 0.0000E+00 +80.500 4.3912E+03 0.0000E+00 0.0000E+00 2.2361E+00 2.2361E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 2.5832E+00 2.5832E+00 5.1664E+00 5.0000E-01 5.0000E-01 5.1661E-01 0.0000E+00 0.0000E+00 0.0000E+00 +80.501 4.0547E+03 0.0000E+00 0.0000E+00 2.2368E+00 2.2368E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 2.3867E+00 2.3867E+00 4.7734E+00 5.0000E-01 5.0000E-01 4.7702E-01 0.0000E+00 0.0000E+00 0.0000E+00 +92.000 3.8762E+03 0.0000E+00 0.0000E+00 2.1384E+00 2.1384E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 2.0852E+00 2.0852E+00 4.1705E+00 5.0000E-01 5.0000E-01 4.5602E-01 0.0000E+00 0.0000E+00 0.0000E+00 +92.001 3.5543E+03 0.0000E+00 0.0000E+00 2.1391E+00 2.1391E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 1.9133E+00 1.9133E+00 3.8267E+00 5.0000E-01 5.0000E-01 4.1816E-01 0.0000E+00 0.0000E+00 0.0000E+00 +103.500 3.3908E+03 0.0000E+00 0.0000E+00 2.0406E+00 2.0406E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 1.6611E+00 1.6611E+00 3.3223E+00 5.0000E-01 5.0000E-01 3.9891E-01 0.0000E+00 0.0000E+00 0.0000E+00 +103.501 3.0836E+03 0.0000E+00 0.0000E+00 2.0413E+00 2.0413E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 1.5117E+00 1.5117E+00 3.0234E+00 5.0000E-01 5.0000E-01 3.6277E-01 0.0000E+00 0.0000E+00 0.0000E+00 +115.630 2.9267E+03 0.0000E+00 0.0000E+00 1.9375E+00 1.9375E+00 0.0000E+00 0.0000E+00 2.1000E+17 8.0769E+17 1.2925E+00 1.2925E+00 2.5850E+00 5.0000E-01 5.0000E-01 3.4432E-01 0.0000E+00 0.0000E+00 0.0000E+00 \ No newline at end of file diff --git a/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Towertop_st.dat b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Towertop_st.dat new file mode 100644 index 0000000..3a0c0e6 --- /dev/null +++ b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_Towertop_st.dat @@ -0,0 +1,9 @@ +#1 Tower top +r m x_cg y_cg ri_x ri_y x_sh y_sh E G I_x I_y I_p k_x k_y A pitch x_e y_e +$1 2 towertop with nacelle mass on bottom element. flexible +0.0 1.00E-04 0 0 1.36E+00 1.36E+00 0 0 2.10E+11 8.08E+10 5.52E-01 5.52E-01 1.10E+00 0.5 0.5 2.98E-01 0 0 0 +2.75 1.00E-04 0 0 1.36E+00 1.36E+00 0 0 2.10E+11 8.08E+10 5.52E-01 5.52E-01 1.10E+00 0.5 0.5 2.98E-01 0 0 0 +r m x_cg y_cg ri_x ri_y x_sh y_sh E G I_x I_y I_p k_x k_y A pitch x_e y_e +$2 2 towertop with nacelle mass on bottom element. Stiff +0.0 1.00E-04 0 0 1.36E+00 1.36E+00 0 0 2.10E+17 8.08E+17 5.52E-01 5.52E-01 1.10E+00 0.5 0.5 2.98E-01 0 0 0 +2.75 1.00E-04 0 0 1.36E+00 1.36E+00 0 0 2.10E+17 8.08E+17 5.52E-01 5.52E-01 1.10E+00 0.5 0.5 2.98E-01 0 0 0 \ No newline at end of file diff --git a/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_ae.dat b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_ae.dat new file mode 100644 index 0000000..9f4692e --- /dev/null +++ b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_ae.dat @@ -0,0 +1,42 @@ +1 +1 40 +0.0000E+00 5.3800E+00 1.0000E+02 1 ; +2.0000E+00 5.3800E+00 1.0000E+02 1 ; +4.7120E+00 5.3800E+00 9.6915E+01 1 ; +5.3960E+00 5.3800E+00 9.5291E+01 1 ; +6.3190E+00 5.3886E+00 9.2664E+01 1 ; +7.4750E+00 5.4212E+00 8.8775E+01 1 ; +8.8580E+00 5.4865E+00 8.3448E+01 1 ; +1.0458E+01 5.5887E+00 7.6689E+01 1 ; +1.2268E+01 5.7247E+00 6.8754E+01 1 ; +1.4275E+01 5.8817E+00 6.0273E+01 1 ; +1.6467E+01 6.0346E+00 5.2291E+01 1 ; +1.8833E+01 6.1478E+00 4.5826E+01 1 ; +2.1356E+01 6.2020E+00 4.0950E+01 1 ; +2.4023E+01 6.1950E+00 3.7343E+01 1 ; +2.6817E+01 6.1292E+00 3.4518E+01 1 ; +2.9721E+01 6.0096E+00 3.2270E+01 1 ; +3.2719E+01 5.8432E+00 3.0488E+01 1 ; +3.5791E+01 5.6400E+00 2.9020E+01 1 ; +3.8920E+01 5.4107E+00 2.7756E+01 1 ; +4.2086E+01 5.1613E+00 2.6693E+01 1 ; +4.5272E+01 4.8974E+00 2.5829E+01 1 ; +4.8457E+01 4.6255E+00 2.5157E+01 1 ; +5.1623E+01 4.3519E+00 2.4665E+01 1 ; +5.4750E+01 4.0827E+00 2.4338E+01 1 ; +5.7820E+01 3.8220E+00 2.4156E+01 1 ; +6.0815E+01 3.5724E+00 2.4100E+01 1 ; +6.3716E+01 3.3364E+00 2.4100E+01 1 ; +6.6506E+01 3.1161E+00 2.4100E+01 1 ; +6.9168E+01 2.9130E+00 2.4100E+01 1 ; +7.1687E+01 2.7275E+00 2.4100E+01 1 ; +7.4047E+01 2.5595E+00 2.4100E+01 1 ; +7.6234E+01 2.4087E+00 2.4100E+01 1 ; +7.8234E+01 2.2660E+00 2.4100E+01 1 ; +8.0037E+01 2.1175E+00 2.4100E+01 1 ; +8.1631E+01 1.9588E+00 2.4100E+01 1 ; +8.3006E+01 1.7913E+00 2.4100E+01 1 ; +8.4155E+01 1.6013E+00 2.4100E+01 1 ; +8.5070E+01 1.3858E+00 2.4100E+01 1 ; +8.5746E+01 1.1384E+00 2.4100E+01 1 ; +8.6366E+01 8.3354E-01 2.4100E+01 1 ; diff --git a/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_pc.dat b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_pc.dat new file mode 100644 index 0000000..b63669d --- /dev/null +++ b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/data/DTU_10MW_RWT_pc.dat @@ -0,0 +1,638 @@ +1 DTU 10MW RWT, DTU Wind Energy. Data generated using EllipSys2D with free transition TI=0.1 and 3D corrected using the model by Bak et al. +6 + 1 105 24.10000 FFA-W3-241 (Re=12x10^6) +-180.00000 0.00000 0.00000 0.00000 +-175.00000 0.17360 0.01140 0.02180 +-170.00000 0.34200 0.04520 0.04340 +-165.00000 0.50000 0.10050 0.06470 +-160.00000 0.64280 0.17550 0.08550 +-155.00000 0.76600 0.26790 0.10570 +-150.00000 0.86600 0.37500 0.12500 +-145.00000 0.93970 0.49350 0.14340 +-140.00000 0.98480 0.61970 0.16070 +-135.00000 1.00000 0.75000 0.17680 +-130.00000 0.98480 0.88030 0.19150 +-125.00000 0.93970 1.00650 0.20480 +-120.00000 0.86600 1.12500 0.21650 +-115.00000 0.76600 1.23210 0.22660 +-110.00000 0.64280 1.32450 0.23490 +-105.00000 0.50000 1.39950 0.24150 +-100.00000 0.34200 1.45480 0.24620 + -95.00000 0.17360 1.48860 0.24900 + -90.00000 0.00000 1.50000 0.25000 + -85.00000 -0.17360 1.48860 0.24900 + -80.00000 -0.34200 1.45480 0.24620 + -75.00000 -0.50000 1.39950 0.24150 + -70.00000 -0.64280 1.32450 0.23490 + -65.00000 -0.76600 1.23210 0.22660 + -60.00000 -0.86600 1.12500 0.21650 + -55.00000 -0.93970 1.00650 0.20480 + -50.00000 -0.98480 0.86030 0.19150 + -45.00000 -1.01200 0.71200 0.17080 + -40.00000 -1.03760 0.54750 0.14160 + -39.00000 -1.04190 0.51650 0.13460 + -38.00000 -1.04620 0.48160 0.12760 + -37.00000 -1.05250 0.44870 0.11850 + -36.00000 -1.05680 0.41770 0.10950 + -35.00000 -1.06110 0.38480 0.10050 + -34.00000 -1.06540 0.35580 0.08940 + -33.00000 -1.07170 0.32890 0.08240 + -32.00000 -1.07650 0.30310 0.06780 + -30.00000 -1.08890 0.25600 0.05080 + -28.00000 -1.09930 0.20900 0.03370 + -26.00000 -1.11680 0.17560 0.02060 + -24.00000 -1.12820 0.14230 0.00750 + -22.00000 -1.12150 0.11830 -0.00080 + -20.00000 -1.11480 0.09430 -0.00910 + -18.00000 -1.09190 0.07650 -0.01230 + -16.00000 -1.06910 0.05870 -0.01560 + -14.00000 -1.03790 0.04540 -0.01560 + -12.00000 -1.00670 0.03210 -0.01550 + -10.00000 -0.84790 0.02300 -0.03180 + -8.00000 -0.68920 0.01380 -0.04800 + -6.00000 -0.42780 0.01180 -0.06110 + -4.00000 -0.16650 0.00980 -0.07420 + -2.00000 0.08630 0.00950 -0.08110 + 0.00000 0.33910 0.00920 -0.08800 + 2.00000 0.58670 0.00940 -0.09330 + 4.00000 0.83010 0.00990 -0.09770 + 6.00000 1.06560 0.01090 -0.10080 + 8.00000 1.29140 0.01240 -0.10260 + 10.00000 1.50120 0.01440 -0.10240 + 12.00000 1.68860 0.01730 -0.09980 + 14.00000 1.81030 0.02260 -0.09410 + 16.00000 1.81390 0.03540 -0.08740 + 18.00000 1.75450 0.06470 -0.08500 + 20.00000 1.60710 0.10350 -0.09130 + 22.00000 1.52570 0.14370 -0.10260 + 24.00000 1.44280 0.18410 -0.11400 + 26.00000 1.38260 0.22900 -0.12820 + 28.00000 1.32180 0.27380 -0.14230 + 30.00000 1.25830 0.32780 -0.15820 + 32.00000 1.19440 0.38160 -0.17390 + 33.00000 1.17340 0.42090 -0.17900 + 34.00000 1.15680 0.45040 -0.18310 + 35.00000 1.13790 0.48150 -0.18730 + 36.00000 1.12480 0.51050 -0.19140 + 37.00000 1.11770 0.54500 -0.19530 + 38.00000 1.10240 0.57370 -0.19930 + 39.00000 1.08910 0.59990 -0.20320 + 40.00000 1.07550 0.62800 -0.20710 + 45.00000 1.01750 0.75780 -0.21610 + 50.00000 0.97160 0.88200 -0.21840 + 55.00000 0.92680 1.01040 -0.22140 + 60.00000 0.86600 1.12500 -0.22550 + 65.00000 0.76600 1.23210 -0.23060 + 70.00000 0.64280 1.32450 -0.23490 + 75.00000 0.50000 1.39950 -0.24150 + 80.00000 0.34200 1.45480 -0.24620 + 85.00000 0.17360 1.48860 -0.24900 + 90.00000 0.00000 1.50000 -0.25000 + 95.00000 -0.17360 1.48860 -0.24900 + 100.00000 -0.34200 1.45480 -0.24620 + 105.00000 -0.50000 1.39950 -0.24150 + 110.00000 -0.64280 1.32450 -0.23490 + 115.00000 -0.76600 1.23210 -0.22660 + 120.00000 -0.86600 1.12500 -0.21650 + 125.00000 -0.93970 1.00650 -0.20480 + 130.00000 -0.98480 0.88030 -0.19150 + 135.00000 -1.00000 0.75000 -0.17680 + 140.00000 -0.98480 0.61970 -0.16070 + 145.00000 -0.93970 0.49350 -0.14340 + 150.00000 -0.86600 0.37500 -0.12500 + 155.00000 -0.76600 0.26790 -0.10570 + 160.00000 -0.64280 0.17550 -0.08550 + 165.00000 -0.50000 0.10050 -0.06470 + 170.00000 -0.34200 0.04520 -0.04340 + 175.00000 -0.17360 0.01140 -0.02180 + 180.00000 0.00000 0.00000 0.00000 + 2 105 30.10000 FFA-W3-301 (Re=10x10^6) +-180.00000 0.00000 0.00000 0.00000 +-175.00000 0.17360 0.00990 0.02180 +-170.00000 0.34200 0.03920 0.04340 +-165.00000 0.50000 0.08710 0.06470 +-160.00000 0.64280 0.15210 0.08550 +-155.00000 0.76600 0.23220 0.10570 +-150.00000 0.86600 0.32500 0.12500 +-145.00000 0.93970 0.42770 0.14340 +-140.00000 0.98480 0.53710 0.16070 +-135.00000 1.00000 0.65000 0.17680 +-130.00000 0.98480 0.76290 0.19150 +-125.00000 0.93970 0.87230 0.20480 +-120.00000 0.86600 0.97500 0.21650 +-115.00000 0.76600 1.06780 0.22660 +-110.00000 0.64280 1.14790 0.23490 +-105.00000 0.50000 1.21290 0.24150 +-100.00000 0.34200 1.26080 0.24620 + -95.00000 0.17360 1.29010 0.24900 + -90.00000 0.00000 1.30000 0.25000 + -85.00000 -0.17360 1.29010 0.24900 + -80.00000 -0.34200 1.26080 0.24620 + -75.00000 -0.50000 1.21290 0.24150 + -70.00000 -0.64280 1.14790 0.23490 + -65.00000 -0.76600 1.06780 0.22660 + -60.00000 -0.86600 0.97500 0.21650 + -55.00000 -0.93970 0.87230 0.20480 + -50.00000 -0.98480 0.76290 0.19150 + -45.00000 -1.00000 0.65000 0.17680 + -40.00000 -1.02160 0.53520 0.14160 + -39.00000 -1.02390 0.50660 0.13460 + -38.00000 -1.01620 0.48510 0.12760 + -37.00000 -1.01850 0.45650 0.12050 + -36.00000 -1.01080 0.42790 0.11350 + -35.00000 -1.00310 0.39940 0.09650 + -34.00000 -0.99540 0.37080 0.07940 + -33.00000 -0.98770 0.33530 0.06240 + -32.00000 -0.98350 0.30970 0.05150 + -30.00000 -0.97030 0.26630 0.03890 + -28.00000 -0.96720 0.22290 0.02630 + -26.00000 -0.94410 0.19410 0.01540 + -24.00000 -0.93100 0.16540 0.00450 + -22.00000 -0.90470 0.14170 -0.00390 + -20.00000 -0.87840 0.11810 -0.01230 + -18.00000 -0.84590 0.09860 -0.01750 + -16.00000 -0.81340 0.07920 -0.02270 + -14.00000 -0.77280 0.06430 -0.02350 + -12.00000 -0.73220 0.04950 -0.02440 + -10.00000 -0.69350 0.03810 -0.02270 + -8.00000 -0.65470 0.02670 -0.02100 + -6.00000 -0.45070 0.02040 -0.03890 + -4.00000 -0.24670 0.01400 -0.05690 + -2.00000 0.02950 0.01290 -0.07170 + 0.00000 0.30560 0.01180 -0.08650 + 2.00000 0.56700 0.01190 -0.09540 + 4.00000 0.81990 0.01250 -0.10240 + 6.00000 1.06140 0.01360 -0.10710 + 8.00000 1.28740 0.01520 -0.10940 + 10.00000 1.48400 0.01800 -0.10796 + 12.00000 1.63880 0.02240 -0.10256 + 14.00000 1.73270 0.03030 -0.09524 + 16.00000 1.71420 0.05390 -0.09104 + 18.00000 1.68280 0.09540 -0.09794 + 20.00000 1.65670 0.14350 -0.11030 + 22.00000 1.64440 0.22800 -0.12996 + 24.00000 1.63290 0.31480 -0.15332 + 26.00000 1.63330 0.39260 -0.17600 + 28.00000 1.61750 0.46230 -0.19658 + 30.00000 1.59750 0.52660 -0.21490 + 32.00000 1.57080 0.58550 -0.23130 + 33.00000 1.57580 0.62150 -0.23660 + 34.00000 1.55710 0.65620 -0.24060 + 35.00000 1.54750 0.68970 -0.24470 + 36.00000 1.52680 0.71480 -0.24870 + 37.00000 1.52590 0.74640 -0.24960 + 38.00000 1.51390 0.77620 -0.24550 + 39.00000 1.49180 0.79820 -0.24440 + 40.00000 1.45960 0.81970 -0.24230 + 45.00000 1.29510 0.91220 -0.23730 + 50.00000 1.12560 0.96650 -0.23537 + 55.00000 0.98080 0.99570 -0.23243 + 60.00000 0.86600 1.03500 -0.23350 + 65.00000 0.76600 1.08280 -0.23360 + 70.00000 0.64280 1.14790 -0.23490 + 75.00000 0.50000 1.21290 -0.24150 + 80.00000 0.34200 1.26080 -0.24620 + 85.00000 0.17360 1.29010 -0.24900 + 90.00000 0.00000 1.30000 -0.25000 + 95.00000 -0.17360 1.29010 -0.24900 + 100.00000 -0.34200 1.26080 -0.24620 + 105.00000 -0.50000 1.21290 -0.24150 + 110.00000 -0.64280 1.14790 -0.23490 + 115.00000 -0.76600 1.06780 -0.22660 + 120.00000 -0.86600 0.97500 -0.21650 + 125.00000 -0.93970 0.87230 -0.20480 + 130.00000 -0.98480 0.76290 -0.19150 + 135.00000 -1.00000 0.65000 -0.17680 + 140.00000 -0.98480 0.53710 -0.16070 + 145.00000 -0.93970 0.42770 -0.14340 + 150.00000 -0.86600 0.32500 -0.12500 + 155.00000 -0.76600 0.23220 -0.10570 + 160.00000 -0.64280 0.15210 -0.08550 + 165.00000 -0.50000 0.08710 -0.06470 + 170.00000 -0.34200 0.03920 -0.04340 + 175.00000 -0.17360 0.00990 -0.02180 + 180.00000 0.00000 0.00000 0.00000 + 3 105 36.00000 FFA-W3-360 (Re=10x10^6) +-180.00000 0.00000 0.00000 0.00000 +-175.00000 0.17360 0.00990 0.02180 +-170.00000 0.34200 0.03920 0.04340 +-165.00000 0.50000 0.08710 0.06470 +-160.00000 0.64280 0.15210 0.08550 +-155.00000 0.76600 0.23220 0.10570 +-150.00000 0.86600 0.32500 0.12500 +-145.00000 0.93970 0.42770 0.14340 +-140.00000 0.98480 0.53710 0.16070 +-135.00000 1.00000 0.65000 0.17680 +-130.00000 0.98480 0.76290 0.19150 +-125.00000 0.93970 0.87230 0.20480 +-120.00000 0.86600 0.97500 0.21650 +-115.00000 0.76600 1.06780 0.22660 +-110.00000 0.64280 1.14790 0.23490 +-105.00000 0.50000 1.21290 0.24150 +-100.00000 0.34200 1.26080 0.24620 + -95.00000 0.17360 1.29010 0.24900 + -90.00000 0.00000 1.30000 0.25000 + -85.00000 -0.17360 1.29010 0.24900 + -80.00000 -0.34200 1.26080 0.24620 + -75.00000 -0.50000 1.21290 0.24150 + -70.00000 -0.64280 1.14790 0.23490 + -65.00000 -0.76600 1.06780 0.22660 + -60.00000 -0.86600 0.97500 0.21650 + -55.00000 -0.93970 0.87230 0.20480 + -50.00000 -0.98480 0.76290 0.19150 + -45.00000 -1.00000 0.65000 0.17680 + -40.00000 -0.97160 0.53520 0.14160 + -39.00000 -0.96390 0.51360 0.13460 + -38.00000 -0.94620 0.48510 0.12760 + -37.00000 -0.92850 0.46350 0.12050 + -36.00000 -0.91080 0.43490 0.11350 + -35.00000 -0.89310 0.40640 0.09650 + -34.00000 -0.88540 0.37780 0.07940 + -33.00000 -0.86770 0.35230 0.06240 + -32.00000 -0.85640 0.33150 0.04470 + -30.00000 -0.83780 0.27770 0.03270 + -28.00000 -0.81910 0.23380 0.02080 + -26.00000 -0.79240 0.20450 0.01020 + -24.00000 -0.77560 0.17510 -0.00040 + -22.00000 -0.74410 0.15130 -0.00890 + -20.00000 -0.71260 0.12740 -0.01740 + -18.00000 -0.66780 0.10850 -0.02290 + -16.00000 -0.62310 0.08960 -0.02850 + -14.00000 -0.57420 0.07480 -0.03000 + -12.00000 -0.52520 0.06000 -0.03140 + -10.00000 -0.48270 0.04850 -0.02790 + -8.00000 -0.44020 0.03700 -0.02440 + -6.00000 -0.29830 0.02940 -0.03590 + -4.00000 -0.15640 0.02190 -0.04740 + -2.00000 0.17440 0.02030 -0.07820 + 0.00000 0.50530 0.01870 -0.10900 + 2.00000 0.82410 0.01880 -0.13290 + 4.00000 1.12090 0.01960 -0.15100 + 6.00000 1.38970 0.02130 -0.16298 + 8.00000 1.62540 0.02400 -0.16908 + 10.00000 1.81090 0.02790 -0.16832 + 12.00000 1.85890 0.03650 -0.15848 + 14.00000 1.81590 0.07600 -0.15576 + 16.00000 1.77860 0.11650 -0.16696 + 18.00000 1.75600 0.15710 -0.18094 + 20.00000 1.76300 0.20630 -0.19598 + 22.00000 1.80020 0.30570 -0.21428 + 24.00000 1.84950 0.41530 -0.23648 + 26.00000 1.87750 0.51630 -0.25882 + 28.00000 1.88280 0.60690 -0.27966 + 30.00000 1.86890 0.68920 -0.29830 + 32.00000 1.84390 0.76250 -0.31466 + 33.00000 1.83490 0.79540 -0.31660 + 34.00000 1.82970 0.82320 -0.31060 + 35.00000 1.81360 0.84460 -0.30470 + 36.00000 1.78540 0.86840 -0.29870 + 37.00000 1.76690 0.89120 -0.29260 + 38.00000 1.72690 0.90660 -0.28650 + 39.00000 1.68640 0.92550 -0.28440 + 40.00000 1.64580 0.93850 -0.28030 + 45.00000 1.44730 1.02900 -0.26330 + 50.00000 1.13560 1.07150 -0.25437 + 55.00000 0.98080 1.08570 -0.24543 + 60.00000 0.86600 1.10000 -0.23650 + 65.00000 0.76600 1.12780 -0.23660 + 70.00000 0.64280 1.16290 -0.23890 + 75.00000 0.50000 1.21290 -0.24150 + 80.00000 0.34200 1.26080 -0.24620 + 85.00000 0.17360 1.29010 -0.24900 + 90.00000 0.00000 1.30000 -0.25000 + 95.00000 -0.17360 1.29010 -0.24900 + 100.00000 -0.34200 1.26080 -0.24620 + 105.00000 -0.50000 1.21290 -0.24150 + 110.00000 -0.64280 1.14790 -0.23490 + 115.00000 -0.76600 1.06780 -0.22660 + 120.00000 -0.86600 0.97500 -0.21650 + 125.00000 -0.93970 0.87230 -0.20480 + 130.00000 -0.98480 0.76290 -0.19150 + 135.00000 -1.00000 0.65000 -0.17680 + 140.00000 -0.98480 0.53710 -0.16070 + 145.00000 -0.93970 0.42770 -0.14340 + 150.00000 -0.86600 0.32500 -0.12500 + 155.00000 -0.76600 0.23220 -0.10570 + 160.00000 -0.64280 0.15210 -0.08550 + 165.00000 -0.50000 0.08710 -0.06470 + 170.00000 -0.34200 0.03920 -0.04340 + 175.00000 -0.17360 0.00990 -0.02180 + 180.00000 0.00000 0.00000 0.00000 + 4 105 48.00000 FFA-W3-"480" (Re=10x10^6) +-180.00000 0.00000 0.00000 0.00000 +-175.00000 0.17360 0.00990 0.02180 +-170.00000 0.34200 0.03920 0.04340 +-165.00000 0.50000 0.08710 0.06470 +-160.00000 0.64280 0.15210 0.08550 +-155.00000 0.76600 0.23220 0.10570 +-150.00000 0.86600 0.32500 0.12500 +-145.00000 0.93970 0.42770 0.14340 +-140.00000 0.98480 0.53710 0.16070 +-135.00000 1.00000 0.65000 0.17680 +-130.00000 0.98480 0.76290 0.19150 +-125.00000 0.93970 0.87230 0.20480 +-120.00000 0.86600 0.97500 0.21650 +-115.00000 0.76600 1.06780 0.22660 +-110.00000 0.64280 1.14790 0.23490 +-105.00000 0.50000 1.21290 0.24150 +-100.00000 0.34200 1.26080 0.24620 + -95.00000 0.17360 1.29010 0.24900 + -90.00000 0.00000 1.30000 0.25000 + -85.00000 -0.17360 1.29010 0.24900 + -80.00000 -0.34200 1.26080 0.24620 + -75.00000 -0.50000 1.21290 0.24150 + -70.00000 -0.64280 1.14790 0.23490 + -65.00000 -0.76600 1.06780 0.22660 + -60.00000 -0.86600 0.97500 0.21650 + -55.00000 -0.93970 0.87230 0.19780 + -50.00000 -0.98480 0.76290 0.17750 + -45.00000 -1.00000 0.65000 0.15580 + -40.00000 -0.98160 0.53520 0.12460 + -39.00000 -0.95390 0.51360 0.11060 + -38.00000 -0.92620 0.48510 0.09660 + -37.00000 -0.88850 0.45650 0.08250 + -36.00000 -0.85080 0.42790 0.06550 + -35.00000 -0.82310 0.39240 0.05850 + -34.00000 -0.78540 0.36380 0.04840 + -33.00000 -0.74770 0.33830 0.03840 + -32.00000 -0.70110 0.31230 0.03050 + -30.00000 -0.62080 0.26630 0.02000 + -28.00000 -0.54060 0.24020 0.00940 + -26.00000 -0.46940 0.21690 -0.00060 + -24.00000 -0.38810 0.19360 -0.01060 + -22.00000 -0.31610 0.17320 -0.01970 + -20.00000 -0.24420 0.15290 -0.02890 + -18.00000 -0.16410 0.13550 -0.03680 + -16.00000 -0.08410 0.11800 -0.04480 + -14.00000 0.00210 0.10350 -0.05100 + -12.00000 0.08830 0.08900 -0.05720 + -10.00000 0.17220 0.07730 -0.06040 + -8.00000 0.25610 0.06560 -0.06360 + -6.00000 0.31790 0.05630 -0.06050 + -4.00000 0.37980 0.04700 -0.05740 + -2.00000 0.35730 0.04050 -0.03510 + 0.00000 0.33480 0.03410 -0.01280 + 2.00000 0.56520 0.03160 -0.04940 + 4.00000 0.87690 0.03430 -0.08940 + 6.00000 1.04250 0.04510 -0.11168 + 8.00000 0.94870 0.07000 -0.12084 + 10.00000 0.90880 0.08860 -0.13760 + 12.00000 0.97610 0.09930 -0.15942 + 14.00000 1.11300 0.10700 -0.18234 + 16.00000 1.30650 0.11630 -0.20664 + 18.00000 1.54140 0.13170 -0.23150 + 20.00000 1.80490 0.15700 -0.25662 + 22.00000 2.00200 0.27570 -0.28058 + 24.00000 2.12160 0.42240 -0.30574 + 26.00000 2.19160 0.56100 -0.32940 + 28.00000 2.22910 0.68610 -0.35198 + 30.00000 2.23220 0.79580 -0.37100 + 32.00000 2.21880 0.89150 -0.38784 + 33.00000 2.20920 0.92290 -0.38450 + 34.00000 2.19270 0.94720 -0.38060 + 35.00000 2.16250 0.96640 -0.37470 + 36.00000 2.13130 0.98890 -0.36870 + 37.00000 2.08780 1.00730 -0.36260 + 38.00000 2.04350 1.02840 -0.35650 + 39.00000 1.99840 1.05210 -0.35040 + 40.00000 1.94180 1.07690 -0.34430 + 45.00000 1.65350 1.16970 -0.32330 + 50.00000 1.30160 1.19650 -0.30437 + 55.00000 1.03080 1.19570 -0.29543 + 60.00000 0.86600 1.19000 -0.28650 + 65.00000 0.76600 1.19280 -0.27660 + 70.00000 0.64280 1.20290 -0.26490 + 75.00000 0.50000 1.21290 -0.25150 + 80.00000 0.34200 1.26080 -0.24620 + 85.00000 0.17360 1.29010 -0.24900 + 90.00000 0.00000 1.30000 -0.25000 + 95.00000 -0.17360 1.29010 -0.24900 + 100.00000 -0.34200 1.26080 -0.24620 + 105.00000 -0.50000 1.21290 -0.24150 + 110.00000 -0.64280 1.14790 -0.23490 + 115.00000 -0.76600 1.06780 -0.22660 + 120.00000 -0.86600 0.97500 -0.21650 + 125.00000 -0.93970 0.87230 -0.20480 + 130.00000 -0.98480 0.76290 -0.19150 + 135.00000 -1.00000 0.65000 -0.17680 + 140.00000 -0.98480 0.53710 -0.16070 + 145.00000 -0.93970 0.42770 -0.14340 + 150.00000 -0.86600 0.32500 -0.12500 + 155.00000 -0.76600 0.23220 -0.10570 + 160.00000 -0.64280 0.15210 -0.08550 + 165.00000 -0.50000 0.08710 -0.06470 + 170.00000 -0.34200 0.03920 -0.04340 + 175.00000 -0.17360 0.00990 -0.02180 + 180.00000 0.00000 0.00000 0.00000 + 5 105 60.00000 FFA-W3-"600" (Re=6x10^6) +-180.00000 0.00000 0.00000 0.00000 +-175.00000 0.17360 0.00990 0.02180 +-170.00000 0.34200 0.03920 0.04340 +-165.00000 0.50000 0.08710 0.06470 +-160.00000 0.64280 0.15210 0.08550 +-155.00000 0.76600 0.23220 0.10570 +-150.00000 0.86600 0.32500 0.12500 +-145.00000 0.93970 0.42770 0.14340 +-140.00000 0.98480 0.53710 0.16070 +-135.00000 1.00000 0.65000 0.17680 +-130.00000 0.98480 0.76290 0.19150 +-125.00000 0.93970 0.87230 0.20480 +-120.00000 0.86600 0.97500 0.21650 +-115.00000 0.76600 1.06780 0.22660 +-110.00000 0.64280 1.14790 0.23490 +-105.00000 0.50000 1.21290 0.24150 +-100.00000 0.34200 1.26080 0.24620 + -95.00000 0.17360 1.29010 0.24900 + -90.00000 0.00000 1.30000 0.25000 + -85.00000 -0.17360 1.29010 0.24900 + -80.00000 -0.34200 1.26080 0.24620 + -75.00000 -0.50000 1.21290 0.24150 + -70.00000 -0.64280 1.14790 0.23490 + -65.00000 -0.76600 1.06780 0.22660 + -60.00000 -0.86600 0.97500 0.21650 + -55.00000 -0.93970 0.87230 0.19780 + -50.00000 -0.98480 0.76290 0.17750 + -45.00000 -1.00000 0.65000 0.14880 + -40.00000 -0.95160 0.52820 0.11760 + -39.00000 -0.90390 0.50260 0.10760 + -38.00000 -0.82620 0.46710 0.09060 + -37.00000 -0.71850 0.43450 0.08050 + -36.00000 -0.62080 0.39890 0.06650 + -35.00000 -0.52310 0.36340 0.05950 + -34.00000 -0.44540 0.32780 0.05240 + -33.00000 -0.34770 0.30130 0.04540 + -32.00000 -0.25710 0.27290 0.04699 + -30.00000 -0.15740 0.23320 0.06060 + -28.00000 -0.07760 0.20340 0.07420 + -26.00000 0.01150 0.18580 0.08749 + -24.00000 0.10070 0.16810 0.10079 + -22.00000 0.19620 0.15260 0.11329 + -20.00000 0.29180 0.13700 0.12579 + -18.00000 0.39320 0.12400 0.13700 + -16.00000 0.49470 0.11090 0.14822 + -14.00000 0.60040 0.10090 0.15711 + -12.00000 0.70610 0.09080 0.16600 + -10.00000 0.78800 0.08360 0.16771 + -8.00000 0.87000 0.07650 0.16942 + -6.00000 0.83580 0.07480 -0.14700 + -4.00000 0.81620 0.07311 -0.12588 + -2.00000 0.66030 0.07553 -0.08764 + 0.00000 0.51990 0.07795 -0.05062 + 2.00000 0.26360 0.07795 -0.00078 + 4.00000 -0.09060 0.07082 0.06962 + 6.00000 0.16560 0.07483 0.01974 + 8.00000 0.44750 0.08587 -0.02718 + 10.00000 0.70710 0.09990 -0.06712 + 12.00000 0.95400 0.11148 -0.10334 + 14.00000 1.18910 0.12072 -0.13694 + 16.00000 1.41830 0.13678 -0.16866 + 18.00000 1.63920 0.14998 -0.19886 + 20.00000 1.82160 0.16894 -0.22524 + 22.00000 1.98370 0.20657 -0.25094 + 24.00000 2.09850 0.30919 -0.27474 + 26.00000 2.19040 0.43440 -0.29658 + 28.00000 2.25410 0.55120 -0.31712 + 30.00000 2.27310 0.67320 -0.33352 + 32.00000 2.27400 0.77560 -0.34854 + 33.00000 2.27800 0.82090 -0.34660 + 34.00000 2.26580 0.85510 -0.34760 + 35.00000 2.24080 0.88620 -0.34870 + 36.00000 2.23310 0.91410 -0.34270 + 37.00000 2.21340 0.93900 -0.33660 + 38.00000 2.18200 0.97090 -0.33050 + 39.00000 2.13910 0.99960 -0.32440 + 40.00000 2.09510 1.02540 -0.31830 + 45.00000 1.83700 1.14190 -0.30030 + 50.00000 1.51560 1.16150 -0.29137 + 55.00000 1.20080 1.16570 -0.28243 + 60.00000 0.96600 1.17500 -0.27350 + 65.00000 0.76600 1.17780 -0.26360 + 70.00000 0.64280 1.19790 -0.25490 + 75.00000 0.50000 1.21290 -0.25150 + 80.00000 0.34200 1.26080 -0.24620 + 85.00000 0.17360 1.29010 -0.24900 + 90.00000 0.00000 1.30000 -0.25000 + 95.00000 -0.17360 1.29010 -0.24900 + 100.00000 -0.34200 1.26080 -0.24620 + 105.00000 -0.50000 1.21290 -0.24150 + 110.00000 -0.64280 1.14790 -0.23490 + 115.00000 -0.76600 1.06780 -0.22660 + 120.00000 -0.86600 0.97500 -0.21650 + 125.00000 -0.93970 0.87230 -0.20480 + 130.00000 -0.98480 0.76290 -0.19150 + 135.00000 -1.00000 0.65000 -0.17680 + 140.00000 -0.98480 0.53710 -0.16070 + 145.00000 -0.93970 0.42770 -0.14340 + 150.00000 -0.86600 0.32500 -0.12500 + 155.00000 -0.76600 0.23220 -0.10570 + 160.00000 -0.64280 0.15210 -0.08550 + 165.00000 -0.50000 0.08710 -0.06470 + 170.00000 -0.34200 0.03920 -0.04340 + 175.00000 -0.17360 0.00990 -0.02180 + 180.00000 0.00000 0.00000 0.00000 + 6 105 100.00000 Cylinder +-180.00000 0.00000 0.60000 0.00000 +-175.00000 0.00000 0.60000 0.00000 +-170.00000 0.00000 0.60000 0.00000 +-165.00000 0.00000 0.60000 0.00000 +-160.00000 0.00000 0.60000 0.00000 +-155.00000 0.00000 0.60000 0.00000 +-150.00000 0.00000 0.60000 0.00000 +-145.00000 0.00000 0.60000 0.00000 +-140.00000 0.00000 0.60000 0.00000 +-135.00000 0.00000 0.60000 0.00000 +-130.00000 0.00000 0.60000 0.00000 +-125.00000 0.00000 0.60000 0.00000 +-120.00000 0.00000 0.60000 0.00000 +-115.00000 0.00000 0.60000 0.00000 +-110.00000 0.00000 0.60000 0.00000 +-105.00000 0.00000 0.60000 0.00000 +-100.00000 0.00000 0.60000 0.00000 + -95.00000 0.00000 0.60000 0.00000 + -90.00000 0.00000 0.60000 0.00000 + -85.00000 0.00000 0.60000 0.00000 + -80.00000 0.00000 0.60000 0.00000 + -75.00000 0.00000 0.60000 0.00000 + -70.00000 0.00000 0.60000 0.00000 + -65.00000 0.00000 0.60000 0.00000 + -60.00000 0.00000 0.60000 0.00000 + -55.00000 0.00000 0.60000 0.00000 + -50.00000 0.00000 0.60000 0.00000 + -45.00000 0.00000 0.60000 0.00000 + -40.00000 0.00000 0.60000 0.00000 + -39.00000 0.00000 0.60000 0.00000 + -38.00000 0.00000 0.60000 0.00000 + -37.00000 0.00000 0.60000 0.00000 + -36.00000 0.00000 0.60000 0.00000 + -35.00000 0.00000 0.60000 0.00000 + -34.00000 0.00000 0.60000 0.00000 + -33.00000 0.00000 0.60000 0.00000 + -32.00000 0.00000 0.60000 0.00000 + -30.00000 0.00000 0.60000 0.00000 + -28.00000 0.00000 0.60000 0.00000 + -26.00000 0.00000 0.60000 0.00000 + -24.00000 0.00000 0.60000 0.00000 + -22.00000 0.00000 0.60000 0.00000 + -20.00000 0.00000 0.60000 0.00000 + -18.00000 0.00000 0.60000 0.00000 + -16.00000 0.00000 0.60000 0.00000 + -14.00000 0.00000 0.60000 0.00000 + -12.00000 0.00000 0.60000 0.00000 + -10.00000 0.00000 0.60000 0.00000 + -8.00000 0.00000 0.60000 0.00000 + -6.00000 0.00000 0.60000 0.00000 + -4.00000 0.00000 0.60000 0.00000 + -2.00000 0.00000 0.60000 0.00000 + 0.00000 0.00000 0.60000 0.00000 + 2.00000 0.00000 0.60000 0.00000 + 4.00000 0.00000 0.60000 0.00000 + 6.00000 0.00000 0.60000 0.00000 + 8.00000 0.00000 0.60000 0.00000 + 10.00000 0.00000 0.60000 0.00000 + 12.00000 0.00000 0.60000 0.00000 + 14.00000 0.00000 0.60000 0.00000 + 16.00000 0.00000 0.60000 0.00000 + 18.00000 0.00000 0.60000 0.00000 + 20.00000 0.00000 0.60000 0.00000 + 22.00000 0.00000 0.60000 0.00000 + 24.00000 0.00000 0.60000 0.00000 + 26.00000 0.00000 0.60000 0.00000 + 28.00000 0.00000 0.60000 0.00000 + 30.00000 0.00000 0.60000 0.00000 + 32.00000 0.00000 0.60000 0.00000 + 33.00000 0.00000 0.60000 0.00000 + 34.00000 0.00000 0.60000 0.00000 + 35.00000 0.00000 0.60000 0.00000 + 36.00000 0.00000 0.60000 0.00000 + 37.00000 0.00000 0.60000 0.00000 + 38.00000 0.00000 0.60000 0.00000 + 39.00000 0.00000 0.60000 0.00000 + 40.00000 0.00000 0.60000 0.00000 + 45.00000 0.00000 0.60000 0.00000 + 50.00000 0.00000 0.60000 0.00000 + 55.00000 0.00000 0.60000 0.00000 + 60.00000 0.00000 0.60000 0.00000 + 65.00000 0.00000 0.60000 0.00000 + 70.00000 0.00000 0.60000 0.00000 + 75.00000 0.00000 0.60000 0.00000 + 80.00000 0.00000 0.60000 0.00000 + 85.00000 0.00000 0.60000 0.00000 + 90.00000 0.00000 0.60000 0.00000 + 95.00000 0.00000 0.60000 0.00000 + 100.00000 0.00000 0.60000 0.00000 + 105.00000 0.00000 0.60000 0.00000 + 110.00000 0.00000 0.60000 0.00000 + 115.00000 0.00000 0.60000 0.00000 + 120.00000 0.00000 0.60000 0.00000 + 125.00000 0.00000 0.60000 0.00000 + 130.00000 0.00000 0.60000 0.00000 + 135.00000 0.00000 0.60000 0.00000 + 140.00000 0.00000 0.60000 0.00000 + 145.00000 0.00000 0.60000 0.00000 + 150.00000 0.00000 0.60000 0.00000 + 155.00000 0.00000 0.60000 0.00000 + 160.00000 0.00000 0.60000 0.00000 + 165.00000 0.00000 0.60000 0.00000 + 170.00000 0.00000 0.60000 0.00000 + 175.00000 0.00000 0.60000 0.00000 + 180.00000 0.00000 0.60000 0.00000 diff --git a/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/htc/DTU_10MW_RWT.htc b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/htc/DTU_10MW_RWT.htc new file mode 100644 index 0000000..2d92e75 --- /dev/null +++ b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/htc/DTU_10MW_RWT.htc @@ -0,0 +1,652 @@ +;DTU_10MW_RWT, version 5, 04-21-15, anyd +; + begin simulation; + time_stop 1; + solvertype 1; (newmark) + on_no_convergence continue; + convergence_limits 1000 1 1e-07; + logfile ./log/dtu_10mw_rwt_ver4.log; + begin newmark; + deltat 0.02; + end newmark; + end simulation; ; +;---------------------------------------------------------------------------------------------------------------------------------------------------------------- + begin new_htc_structure; ; beam_output_file_name ./log/DTU_10MW_RWT_beam.dat; Optional - Calculated beam properties of the bodies are written to file +; body_output_file_name ./log/DTU_10MW_RWT_body.dat; Optional - Body initial position and orientation are written to file +; body_eigenanalysis_file_name ./eig/DTU_10MW_RWT_body_eigen.dat; +; structure_eigenanalysis_file_name ./eig/DTU_10MW_RWT_strc_eigen.dat ; +;------------------------------------------------------------------------------------------------------------------------------- +;------------------------------------------------------------------------------------------------------------------------------- + begin main_body; tower 115m + name tower; + type timoschenko; + nbodies 1; + node_distribution c2_def; + damping_posdef 0 0 0 0.00412 0.00412 0.00045; Mx My Mz Kx Ky Kz , M´s raises overall level, K´s raises high freguency level "tuned by Larh" + begin timoschenko_input; + filename ./data/dtu_10mw_rwt_tower_st.dat; + set 1 1; + end timoschenko_input; + begin c2_def; Definition of centerline (main_body coordinates) + nsec 11; + sec 1 0 0 0 0; x,y,z,twist + sec 2 0 0 -11.5 0; + sec 3 0 0 -23 0; + sec 4 0 0 -34.5 0; + sec 5 0 0 -46 0; + sec 6 0 0 -57.5 0; + sec 7 0 0 -69 0; + sec 8 0 0 -80.5 0; + sec 9 0 0 -92 0; + sec 10 0 0 -103.5 0; + sec 11 0 0 -115.63 0; + end c2_def; + end main_body; ; + begin main_body; + name towertop; + type timoschenko; + nbodies 1; + node_distribution c2_def; + damping_posdef 0 0 0 0.007 0.007 0.007; "changed by Larh" + concentrated_mass 2 0 2.687 0.30061 446040 4106000 410600 4106000; Nacelle mass and inertia "corrected by Anyd 25/4/13" + begin timoschenko_input; + filename ./data/dtu_10mw_rwt_towertop_st.dat; + set 1 2; + end timoschenko_input; + begin c2_def; Definition of centerline (main_body coordinates) + nsec 2; + sec 1 0 0 0 0; x,y,z,twist + sec 2 0 0 -2.75 0; + end c2_def; + end main_body; ; + begin main_body; + name shaft; + type timoschenko; + nbodies 1; + node_distribution c2_def; + damping_posdef 0 0 0 0.000465 0.000465 0.003983; "tuned by Anyd 23/5/13 to 31.45 log decr. damping for free free with stiff rotor and tower" + concentrated_mass 1 0 0 0 0 0 0 3751000; generator equivalent slow shaft "re_tuned by Anyd 20/2/13" + concentrated_mass 5 0 0 0 105520 0 0 325700; hub mass and inertia; "re_tuned by Anyd 20/2/13" + begin timoschenko_input; + filename ./data/dtu_10mw_rwt_shaft_st.dat; + set 1 1; + end timoschenko_input; + begin c2_def; Definition of centerline (main_body coordinates) + nsec 5; + sec 1 0 0 0 0; Tower top x,y,z,twist + sec 2 0 0 1.5 0; + sec 3 0 0 3 0; + sec 4 0 0 4.4 0; Main bearing + sec 5 0 0 7.1 0; Rotor centre + end c2_def; + end main_body; ; + begin main_body; + name hub1; + type timoschenko; + nbodies 1; + node_distribution c2_def; + damping_posdef 0 0 0 3e-06 3e-06 2e-05; "changed by Larh" + begin timoschenko_input; + filename ./data/dtu_10mw_rwt_hub_st.dat; + set 1 2; + end timoschenko_input; + begin c2_def; Definition of centerline (main_body coordinates) + nsec 2; + sec 1 0 0 0 0; x,y,z,twist + sec 2 0 0 2.8 0; + end c2_def; + end main_body; ; + begin main_body; + name hub2; + copy_main_body hub1; + end main_body; ; + begin main_body; + name hub3; + copy_main_body hub1; + end main_body; ; + begin main_body; + name blade1; + type timoschenko; + nbodies 10; + node_distribution c2_def; + damping_posdef 0 0 0 0.00153 0.00255 0.00033; " 3% damping tuned by tkim 23/03/13 unable to fit 3rd and higher mode" + begin timoschenko_input; + filename ./data/dtu_10mw_rwt_blade_st.dat; + set 1 1; set subset + end timoschenko_input; + begin c2_def; Definition of centerline (main_body coordinates) + nsec 27; + sec 1 0 7.006e-05 4.44089e-16 -14.5; + sec 2 -2.06477e-05 -0.0122119 3 -14.5; + sec 3 -0.0072881 -0.0249251 6 -14.4851; + sec 4 -0.0189235 -0.0273351 7.00004 -14.461; + sec 5 -0.0541282 -0.0282163 8.70051 -14.3388; + sec 6 -0.126633 -0.021321 10.402 -14.0201; + sec 7 -0.225666 -0.0128378 12.2046 -13.3904; + sec 8 -0.288563 -0.00770659 13.2065 -12.9371; + sec 9 -0.399194 -0.00488317 15.01 -11.9445; + sec 10 -0.576634 -0.0180296 18.2151 -9.98243; + sec 11 -0.707136 -0.0501772 21.4178 -8.45147; + sec 12 -0.791081 -0.0941228 24.6189 -7.46417; + sec 13 -0.837195 -0.14888 27.8193 -6.72916; + sec 14 -0.853948 -0.214514 31.0194 -6.08842; + sec 15 -0.849367 -0.290618 34.2197 -5.49322; + sec 16 -0.79392 -0.462574 40.2204 -4.39222; + sec 17 -0.716284 -0.688437 46.6217 -3.09315; + sec 18 -0.634358 -0.960017 53.0232 -1.75629; + sec 19 -0.553179 -1.28424 59.4245 -0.50065; + sec 20 -0.475422 -1.66402 65.8255 0.601964; + sec 21 -0.40318 -2.10743 72.2261 1.5556; + sec 22 -0.330085 -2.6563 79.0266 2.51935; + sec 23 -0.31014 -2.78882 80.5267 2.7295; + sec 24 -0.286719 -2.92517 82.0271 2.93201; + sec 25 -0.255823 -3.06577 83.5274 3.11874; + sec 26 -0.207891 -3.20952 85.0277 3.28847; + sec 27 -0.089894 -3.33685 86.3655 3.42796; + end c2_def; + end main_body; ; + begin main_body; + name blade2; + copy_main_body blade1; + end main_body; ; + begin main_body; + name blade3; + copy_main_body blade1; + end main_body; ;------------------------------------------------------------------------------------------------------------------------------- +; + begin orientation; + begin base; + body tower; + inipos 0 0 0; initial position of node 1 + body_eulerang 0 0 0; + end base; ; + begin relative; + body1 tower last; + body2 towertop 1; + body2_eulerang 0 0 0; + end relative; ; + begin relative; + body1 towertop last; + body2 shaft 1; + body2_eulerang 90 0 0; + body2_eulerang 5 0 0; 5 deg tilt angle + body2_eulerang 0 0 0; + mbdy2_ini_rotvec_d1 0 0 -1 0.7; mbdy2_ini_rotvec_d1 0.0 0.0 -1.0 [init_wr]; + end relative; ; + begin relative; + body1 shaft last; + body2 hub1 1; + body2_eulerang -90 0 0; + body2_eulerang 0 180 0; + body2_eulerang 2.5 0 0; 2.5deg cone angle + end relative; ; + begin relative; + body1 shaft last; + body2 hub2 1; + body2_eulerang -90 0 0; + body2_eulerang 0 60 0; + body2_eulerang 2.5 0 0; 2.5deg cone angle + end relative; ; + begin relative; + body1 shaft last; + body2 hub3 1; + body2_eulerang -90 0 0; + body2_eulerang 0 -60 0; + body2_eulerang 2.5 0 0; 2.5deg cone angle + end relative; ; + begin relative; + body1 hub1 last; + body2 blade1 1; + body2_eulerang 0 0 0; + end relative; ; + begin relative; + body1 hub2 last; + body2 blade2 1; + body2_eulerang 0 0 0; + end relative; ; + begin relative; + body1 hub3 last; + body2 blade3 1; + body2_eulerang 0 0 0; + end relative; ; + end orientation; ;------------------------------------------------------------------------------------------------------------------------------- + begin constraint; ; + begin fix0; fixed to ground in translation and rotation of node 1 + body tower; + end fix0; ; + begin fix1; + body1 tower last; + body2 towertop 1; + end fix1; ; + begin bearing1; free bearing + name shaft_rot; + body1 towertop last; + body2 shaft 1; + bearing_vector 2 0 0 -1; x=coo (0=global.1=body1.2=body2) vector in body2 coordinates where the free rotation is present + end bearing1; ; + begin fix1; + body1 shaft last; + body2 hub1 1; + end fix1; ; + begin fix1; + body1 shaft last; + body2 hub2 1; + end fix1; ; + begin fix1; + body1 shaft last; + body2 hub3 1; + end fix1; ; + begin bearing2; + name pitch1; + body1 hub1 last; + body2 blade1 1; + bearing_vector 2 0 0 -1; + end bearing2; ; + begin bearing2; + name pitch2; + body1 hub2 last; + body2 blade2 1; + bearing_vector 2 0 0 -1; + end bearing2; ; + begin bearing2; + name pitch3; + body1 hub3 last; + body2 blade3 1; + bearing_vector 2 0 0 -1; + end bearing2; + end constraint; ; + end new_htc_structure; ;---------------------------------------------------------------------------------------------------------------------------------------------------------------- + begin wind; + density 1.225; + wsp 4; + tint 0; + horizontal_input 1; + windfield_rotations 0 0 0; yaw, tilt, rotation + center_pos0 0 0 -119; hub heigth + shear_format 1 0.2; + turb_format 1; 0=none, 1=mann,2=flex + tower_shadow_method 0; 0=none, 1=potential flow, 2=jet + scale_time_start 0; + wind_ramp_factor 0 40 0.6 1; ; Steps ; + wind_ramp_abs 140 141 0 1; wsp. after the step: 5.0 + wind_ramp_abs 181 182 0 1; wsp. after the step: 6.0 + wind_ramp_abs 222 223 0 1; wsp. after the step: 7.0 + wind_ramp_abs 263 264 0 1; wsp. after the step: 8.0 + wind_ramp_abs 304 305 0 1; wsp. after the step: 9.0 + wind_ramp_abs 345 346 0 1; wsp. after the step: 10.0 + wind_ramp_abs 386 387 0 1; wsp. after the step: 11.0 + wind_ramp_abs 427 428 0 1; wsp. after the step: 12.0 + wind_ramp_abs 468 469 0 1; wsp. after the step: 13.0 + wind_ramp_abs 509 510 0 1; wsp. after the step: 14.0 + wind_ramp_abs 550 551 0 1; wsp. after the step: 15.0 + wind_ramp_abs 591 592 0 1; wsp. after the step: 16.0 + wind_ramp_abs 632 633 0 1; wsp. after the step: 17.0 + wind_ramp_abs 673 674 0 1; wsp. after the step: 18.0 + wind_ramp_abs 714 715 0 1; wsp. after the step: 19.0 + wind_ramp_abs 755 756 0 1; wsp. after the step: 20.0 + wind_ramp_abs 796 797 0 1; wsp. after the step: 21.0 + wind_ramp_abs 837 838 0 1; wsp. after the step: 22.0 + wind_ramp_abs 878 879 0 1; wsp. after the step: 23.0 + wind_ramp_abs 919 920 0 1; wsp. after the step: 24.0 + wind_ramp_abs 960 961 0 1; wsp. after the step: 25.0 +; + begin tower_shadow_potential_2; + tower_mbdy_link tower; + nsec 2; + radius 0 4.15; + radius 115.63 2.75; + end tower_shadow_potential_2; + end wind; ; + begin aerodrag; + begin aerodrag_element; + mbdy_name tower; + aerodrag_sections uniform 10; + nsec 2; + sec 0 0.6 8.3; tower bottom + sec 115.63 0.6 5.5; tower top + end aerodrag_element; ; + begin aerodrag_element; Nacelle drag side + mbdy_name shaft; + aerodrag_sections uniform 2; + nsec 2; + sec 0 0.8 10; + sec 7.01 0.8 10; + end aerodrag_element; + end aerodrag; ; + begin aero; + nblades 3; + hub_vec shaft -3; rotor rotation vector (normally shaft composant directed from pressure to sustion side) + link 1 mbdy_c2_def blade1; + link 2 mbdy_c2_def blade2; + link 3 mbdy_c2_def blade3; + ae_filename ./data/dtu_10mw_rwt_ae.dat; + pc_filename ./data/dtu_10mw_rwt_pc.dat; + induction_method 1; 0=none, 1=normal + aerocalc_method 1; 0=ingen aerodynamic, 1=med aerodynamic + aerosections 50; def. 50 + ae_sets 1 1 1; + tiploss_method 1; 0=none, 1=prandtl + dynstall_method 2; 0=none, 1=stig øye method,2=mhh method +; + end aero; ;------------------------------------------------------------------------------------------------- + begin dll; ; + begin type2_dll; + name risoe_controller; + filename ./control/dtu_we_controller.dll; + dll_subroutine_init init_regulation; + dll_subroutine_update update_regulation; + arraysizes_init 52 1; + arraysizes_update 12 100; + begin init; ; Overall parameters + constant 1 10000; Rated power [kW] + constant 2 0.5236; Minimum rotor speed [rad/s] + constant 3 1.005; Rated rotor speed [rad/s] + constant 4 15600000; Maximum allowable generator torque [Nm] + constant 5 100; Minimum pitch angle, theta_min [deg], +; if |theta_min|>90, then a table of <wsp,theta_min> is read ; +; from a file named 'wptable.n', where n=int(theta_min) + constant 6 82; Maximum pitch angle [deg] + constant 7 10; Maximum pitch velocity operation [deg/s] + constant 8 0.4; Frequency of generator speed filter [Hz] + constant 9 0.7; Damping ratio of speed filter [-] + constant 10 1.92; Frequency of free-free DT torsion mode [Hz], if zero no notch filter used +; Partial load control parameters + constant 11 11750000; Optimal Cp tracking K factor [Nm/(rad/s)^2], ; +; Qg=K*Omega^2, K=eta*0.5*rho*A*Cp_opt*R^3/lambda_opt^3 + constant 12 70840000; Proportional gain of torque controller [Nm/(rad/s)] + constant 13 15900000; Integral gain of torque controller [Nm/rad] + constant 14 0; Differential gain of torque controller [Nm/(rad/s^2)] +; Full load control parameters + constant 15 2; Generator control switch [1=constant power, 2=constant torque] + constant 16 1.304; Proportional gain of pitch controller [rad/(rad/s)] + constant 17 0.3511; Integral gain of pitch controller [rad/rad] + constant 18 0; Differential gain of pitch controller [rad/(rad/s^2)] + constant 19 4e-09; Proportional power error gain [rad/W] + constant 20 4e-09; Integral power error gain [rad/(Ws)] + constant 21 11.35; Coefficient of linear term in aerodynamic gain scheduling, KK1 [deg] + constant 22 400.7; Coefficient of quadratic term in aerodynamic gain scheduling, KK2 [deg^2] & +; (if zero, KK1 = pitch angle at double gain) + constant 23 1.3; Relative speed for double nonlinear gain [-] +; Cut-in simulation parameters + constant 24 -1; Cut-in time [s] + constant 25 1; Time delay for soft start of torque [1/1P] +; Cut-out simulation parameters + constant 26 1500; Cut-out time [s] + constant 27 5; Time constant for linear torque cut-out [s] + constant 28 1; Stop type [1=normal, 2=emergency] + constant 29 1; Time delay for pitch stop after shut-down signal [s] + constant 30 3; Maximum pitch velocity during initial period of stop [deg/s] + constant 31 3; Time period of initial pitch stop phase [s] (maintains pitch speed specified in constant 30) + constant 32 4; Maximum pitch velocity during final phase of stop [deg/s] +; Expert parameters (keep default values unless otherwise given) + constant 33 2; Lower angle above lowest minimum pitch angle for switch [deg] + constant 34 2; Upper angle above lowest minimum pitch angle for switch [deg], if equal then hard switch + constant 35 95; Ratio between filtered speed and reference speed for fully open torque limits [%] + constant 36 2; Time constant of 1st order filter on wind speed used for minimum pitch [1/1P] + constant 37 1; Time constant of 1st order filter on pitch angle used for gain scheduling [1/1P] +; Drivetrain damper + constant 38 0; Proportional gain of active DT damper [Nm/(rad/s)], requires frequency in input 10 +; Over speed + constant 39 25; Overspeed percentage before initiating turbine controller alarm (shut-down) [%] +; Additional non-linear pitch control term (not used when all zero) + constant 40 0; Err0 [rad/s] + constant 41 0; ErrDot0 [rad/s^2] + constant 42 0; PitNonLin1 [rad/s] +; Storm control command + constant 43 28; Wind speed 'Vstorm' above which derating of rotor speed is used [m/s] + constant 44 28; Cut-out wind speed (only used for derating of rotor speed in storm) [m/s] +; Safety system parameters + constant 45 300; Overspeed percentage before initiating safety system alarm (shut-down) [%] + constant 46 1.5; Max low-pass filtered tower top acceleration level [m/s^2] +; Turbine parameter + constant 47 178; Nominal rotor diameter [m] +; Parameters for rotor inertia reduction in variable speed region + constant 48 0; Proportional gain on rotor acceleration in variable speed region [Nm/(rad/s^2)] (not used when zero) +; Parameters for alternative partial load controller with PI regulated TSR tracking + constant 49 0; Optimal tip speed ratio [-] (only used when K=constant 11 = 0 otherwise Qg=K*Omega^2 is used) +; Parameters for adding aerodynamic drivetrain damping on gain scheduling + constant 50 0; Proportional gain of aerodynamic DT damping [Nm/(rad/s)] + constant 51 0; Coefficient of linear term in aerodynamic DT damping scheduling, KK1 [deg] + constant 52 0; Coefficient of quadratic term in aerodynamic DT damping scheduling, KK2 [deg^2] + end init; ; + begin output; + general time; [s] + constraint bearing1 shaft_rot 1 only 2; Drivetrain speed [rad/s] + constraint bearing2 pitch1 1 only 1; [rad] + constraint bearing2 pitch2 1 only 1; [rad] + constraint bearing2 pitch3 1 only 1; [rad] + wind free_wind 1 0 0 -119; Global coordinates at hub height + dll inpvec 2 2; Elec. power from generator servo .dll + dll inpvec 2 8; Grid state flag from generator servo .dll + mbdy state acc tower 10 1 global only 1; Tower top x-acceleration [m/s^2] + mbdy state acc tower 10 1 global only 2; Tower top y-acceleration [m/s^2] + end output; + end type2_dll; ; + begin type2_dll; + name generator_servo; + filename ./control/generator_servo.dll; + dll_subroutine_init init_generator_servo; + dll_subroutine_update update_generator_servo; + arraysizes_init 7 1; + arraysizes_update 4 8; + begin init; + constant 1 20; Frequency of 2nd order servo model of generator-converter system [Hz] + constant 2 0.9; Damping ratio 2nd order servo model of generator-converter system [-] + constant 3 15600000; Maximum allowable LSS torque (pull-out torque) [Nm] + constant 4 0.94; Generator efficiency [-] + constant 5 1; Gearratio [-] + constant 6 0; Time for half value in softstart of torque [s] + constant 7 1500; Time for grid loss [s] + end init; ; + begin output; + general time; Time [s] + dll inpvec 1 1; Electrical torque reference [Nm] + constraint bearing1 shaft_rot 1 only 2; Generator LSS speed [rad/s] + mbdy momentvec shaft 1 1 shaft only 3; Shaft moment [kNm] (Qshaft) + end output; +; + begin actions; + mbdy moment_int shaft 1 -3 shaft towertop 2; Generator LSS torque [Nm] + end actions; + end type2_dll; ; + begin type2_dll; + name mech_brake; + filename ./control/mech_brake.dll; + dll_subroutine_init init_mech_brake; + dll_subroutine_update update_mech_brake; + arraysizes_init 7 1; + arraysizes_update 4 6; + begin init; + constant 1 2727252; Fully deployed maximum brake torque [Nm] + constant 2 100; Parameter alpha used in Q = tanh(omega*alpha), typically 1e2/Omega_nom + constant 3 0.625; Delay time for before brake starts to deploy [s] - from 5MW*1P_5/1P_10 + constant 4 0.75; Time for brake to become fully deployed [s] + end init; ; + begin output; + general time; Time [s] + constraint bearing1 shaft_rot 1 only 2; Generator LSS speed [rad/s] + dll inpvec 1 25; Command to deploy mechanical disc brake [0,1] + end output; +; + begin actions; + mbdy moment_int shaft 1 3 shaft towertop 2; Brake LSS torque [Nm] + end actions; + end type2_dll; ; + begin type2_dll; + name servo_with_limits; + filename ./control/servo_with_limits.dll; + dll_subroutine_init init_servo_with_limits; + dll_subroutine_update update_servo_with_limits; + arraysizes_init 10 1; + arraysizes_update 5 9; + begin init; + constant 1 3; Number of blades [-] + constant 2 1; Frequency of 2nd order servo model of pitch system [Hz] + constant 3 0.7; Damping ratio 2nd order servo model of pitch system [-] + constant 4 10; Max. pitch speed [deg/s] + constant 5 15; Max. pitch acceleration [deg/s^2] + constant 6 -5; Min. pitch angle [deg] + constant 7 90; Max. pitch angle [deg] + constant 8 1500; Time for pitch runaway [s] + constant 9 1500; Time for stuck blade 1 [s] + constant 10 0; Angle of stuck blade 1 [deg] + end init; + begin output; + general time; Time [s] + dll inpvec 1 2; Pitch1 demand angle [rad] + dll inpvec 1 3; Pitch2 demand angle [rad] + dll inpvec 1 4; Pitch3 demand angle [rad] + dll inpvec 1 26; Flag for emergency pitch stop [0=off/1=on] + end output; +; + begin actions; + constraint bearing2 angle pitch1; Angle pitch1 bearing [rad] + constraint bearing2 angle pitch2; Angle pitch2 bearing [rad] + constraint bearing2 angle pitch3; Angle pitch3 bearing [rad] + end actions; + end type2_dll; ; +; --- DLL for tower-blade tip distance -- ; + begin type2_dll; + name disttowtip; + filename ./control/towclearsens.dll; + dll_subroutine_init initialize; + dll_subroutine_update update; + arraysizes_init 1 1; + arraysizes_update 12 4; + begin init; + constant 1 2.66; Tower radius close to downward blade tip [m] + end init; + begin output; + mbdy state pos tower 3 0.62 global; [1,2,3]. Tower position: 30.18 m + mbdy state pos blade1 26 1 global; [4,5,6] + mbdy state pos blade2 26 1 global; [7,8,9] + mbdy state pos blade3 26 1 global; [10,11,12] + end output; + end type2_dll; + end dll; ;---------------------------------------------------------------------------------------------------------------------------------------------------------------- +; + begin output; + filename ./res/dtu_10mw_rwt; ; time 99.0 1000.0 ; +; data_format hawc_ascii; + data_format hawc_binary; + buffer 1; ; + general time; + constraint bearing1 shaft_rot 2; angle and angle velocity + constraint bearing2 pitch1 5; angle and angle velocity + constraint bearing2 pitch2 5; angle and angle velocity + constraint bearing2 pitch3 5; angle and angle velocity + aero omega; + aero torque; + aero power; + aero thrust; + wind free_wind 1 0 0 -119; local wind at fixed position: coo (1=global,2=non-rotation rotor coo.), pos x, pos y, pos z +; Moments: + mbdy momentvec tower 1 1 tower # tower base; + mbdy momentvec tower 10 2 tower # tower yaw bearing; + mbdy momentvec shaft 4 1 shaft # main bearing; + mbdy momentvec blade1 2 2 blade1 # blade 1 root; + mbdy momentvec blade2 2 2 blade2 # blade 2 root; + mbdy momentvec blade3 2 2 blade3 # blade 3 root; + mbdy momentvec blade1 13 1 local # blade 1 50% local e coo; + mbdy momentvec blade2 13 1 local # blade 2 50% local e coo; + mbdy momentvec blade3 13 1 local # blade 3 50% local e coo; +; Displacements and accellerations + mbdy state pos tower 10 1 global only 1 # tower top fa displ; + mbdy state pos tower 10 1 global only 2 # tower top ss displ; + mbdy state acc tower 10 1 global only 1 # tower top fa acc; + mbdy state acc tower 10 1 global only 2 # tower top ss acc; +; + mbdy state pos blade1 26 1 blade1 # blade 1 tip pos; + mbdy state pos blade2 26 1 blade2 # blade 2 tip pos; + mbdy state pos blade3 26 1 blade3 # blade 3 tip pos; + mbdy state pos blade1 26 1 global # gl blade 1 tip pos; +; - Monitor Aerodynamics - ; + aero windspeed 3 1 1 72.5; + aero alfa 1 72.5; + aero alfa 2 72.5; + aero alfa 3 72.5; + aero cl 1 72.5; + aero cl 2 72.5; + aero cl 3 72.5; + aero cd 1 72.5; + aero cd 2 72.5; + aero cd 3 72.5; +; - Main Controller - +; Output to controller +; dll outvec 1 1 # time; +; dll outvec 1 2 # slow speed shaft rad/s; +; dll outvec 1 3 # pitch angle 1; +; dll outvec 1 4 # pitch angle 2; +; dll outvec 1 5 # pitch angle 3; +; dll outvec 1 6 # WSP_x_global; +; dll outvec 1 7 # WSP_y_global; +; dll outvec 1 8 # WSP_z_global; +; dll outvec 1 9 # Elec. pwr ; +; dll outvec 1 10 # Grid flag ; +; Input from controller + dll inpvec 1 1 # generator torque reference [nm]; + dll inpvec 1 2 # pitch angle reference of blade 1 [rad]; + dll inpvec 1 3 # pitch angle reference of blade 2 [rad]; + dll inpvec 1 4 # pitch angle reference of blade 3 [rad]; + dll inpvec 1 5 # power reference [w]; + dll inpvec 1 6 # filtered wind speed [m/s]; + dll inpvec 1 7 # filtered rotor speed [rad/s]; + dll inpvec 1 8 # filtered rotor speed error for torque [rad/s]; + dll inpvec 1 9 # bandpass filtered rotor speed [rad/s]; + dll inpvec 1 10 # proportional term of torque contr. [nm]; + dll inpvec 1 11 # integral term of torque controller [nm]; + dll inpvec 1 12 # minimum limit of torque [nm]; + dll inpvec 1 13 # maximum limit of torque [nm]; + dll inpvec 1 14 # torque limit switch based on pitch [-]; + dll inpvec 1 15 # filtered rotor speed error for pitch [rad/s]; + dll inpvec 1 16 # power error for pitch [w]; + dll inpvec 1 17 # proportional term of pitch controller [rad]; + dll inpvec 1 18 # integral term of pitch controller [rad]; + dll inpvec 1 19 # minimum limit of pitch [rad]; + dll inpvec 1 20 # maximum limit of pitch [rad]; + dll inpvec 1 21 # torque reference from dt dammper [nm]; + dll inpvec 1 22 # status signal [-]; + dll inpvec 1 23 # total added pitch rate [rad/s]; + dll inpvec 1 24 # filtered mean pitch for gain sch [rad]; + dll inpvec 1 25 # flag for mechnical brake [0=off/1=on]; + dll inpvec 1 26 # flag for emergency pitch stop [0=off/1=on]; + dll inpvec 1 27 # lp filtered acceleration level [m/s^2]; +; ; Output to generator model +; dll outvec 2 1 # time ; +; dll outvec 2 2 # Electrical torque reference [Nm] ; +; dll outvec 2 3 # omega LSS ; +; Input from generator model + dll inpvec 2 1 # mgen lss [nm]; + dll inpvec 2 2 # pelec w; + dll inpvec 2 3 # mframe; + dll inpvec 2 4 # mgen hss; + dll inpvec 2 5 # generator pmech kw; + dll inpvec 2 6 # filtered gen speed; + dll inpvec 2 7 # elec. pwr; + dll inpvec 2 8 # grid flag; +; Output to mechanical brake + dll inpvec 3 1 # brake torque [nm]; +; ; Input from mechanical brake +; dll outvec 3 1 # Time [s] ; +; dll outvec 3 2 # Generator LSS speed [rad/s] ; +; dll outvec 3 3 # Deploy brake ; +; ; Output to pitch servo +; dll outvec 4 1 # time; +; dll outvec 4 2 # pitchref 1; +; dll outvec 4 3 # pitchref 2; +; dll outvec 4 4 # pitchref 3; +; dll outvec 4 5 # Emerg. stop; +; Input from pitch servo + dll inpvec 4 1 # pitch 1; + dll inpvec 4 2 # pitch 2; + dll inpvec 4 3 # pitch 3; +; Check tower clearence + dll inpvec 5 1 # bltip tow min d [m]; + end output; +; + begin output_at_time aero 0.1; + filename res/at; + twist 1; + chord 1; + end output_at_time; + exit; diff --git a/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/htc/test_no_turb.htc b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/htc/test_no_turb.htc new file mode 100644 index 0000000..c6ead2e --- /dev/null +++ b/wetb/hawc2/tests/test_files/simulation_setup/DTU10MWRef6.0_IOS/input/htc/test_no_turb.htc @@ -0,0 +1,647 @@ +;DTU_10MW_RWT, version 5, 04-21-15, anyd +; + begin simulation; + time_stop 1; + solvertype 1; (newmark) + on_no_convergence continue; + convergence_limits 1000 1 1e-07; + logfile ../output/log/test_no_turb.log; + begin newmark; + deltat 0.02; + end newmark; + end simulation; ; +;---------------------------------------------------------------------------------------------------------------------------------------------------------------- + begin new_htc_structure; ; beam_output_file_name ./log/DTU_10MW_RWT_beam.dat; Optional - Calculated beam properties of the bodies are written to file +; body_output_file_name ./log/DTU_10MW_RWT_body.dat; Optional - Body initial position and orientation are written to file +; body_eigenanalysis_file_name ./eig/DTU_10MW_RWT_body_eigen.dat; +; structure_eigenanalysis_file_name ./eig/DTU_10MW_RWT_strc_eigen.dat ; +;------------------------------------------------------------------------------------------------------------------------------- +;------------------------------------------------------------------------------------------------------------------------------- + begin main_body; tower 115m + name tower; + type timoschenko; + nbodies 1; + node_distribution c2_def; + damping_posdef 0 0 0 0.00412 0.00412 0.00045; Mx My Mz Kx Ky Kz , M´s raises overall level, K´s raises high freguency level "tuned by Larh" + begin timoschenko_input; + filename ./data/dtu_10mw_rwt_tower_st.dat; + set 1 1; + end timoschenko_input; + begin c2_def; Definition of centerline (main_body coordinates) + nsec 11; + sec 1 0 0 0 0; x,y,z,twist + sec 2 0 0 -11.5 0; + sec 3 0 0 -23 0; + sec 4 0 0 -34.5 0; + sec 5 0 0 -46 0; + sec 6 0 0 -57.5 0; + sec 7 0 0 -69 0; + sec 8 0 0 -80.5 0; + sec 9 0 0 -92 0; + sec 10 0 0 -103.5 0; + sec 11 0 0 -115.63 0; + end c2_def; + end main_body; ; + begin main_body; + name towertop; + type timoschenko; + nbodies 1; + node_distribution c2_def; + damping_posdef 0 0 0 0.007 0.007 0.007; "changed by Larh" + concentrated_mass 2 0 2.687 0.30061 446040 4106000 410600 4106000; Nacelle mass and inertia "corrected by Anyd 25/4/13" + begin timoschenko_input; + filename ./data/dtu_10mw_rwt_towertop_st.dat; + set 1 2; + end timoschenko_input; + begin c2_def; Definition of centerline (main_body coordinates) + nsec 2; + sec 1 0 0 0 0; x,y,z,twist + sec 2 0 0 -2.75 0; + end c2_def; + end main_body; ; + begin main_body; + name shaft; + type timoschenko; + nbodies 1; + node_distribution c2_def; + damping_posdef 0 0 0 0.000465 0.000465 0.003983; "tuned by Anyd 23/5/13 to 31.45 log decr. damping for free free with stiff rotor and tower" + concentrated_mass 1 0 0 0 0 0 0 3751000; generator equivalent slow shaft "re_tuned by Anyd 20/2/13" + concentrated_mass 5 0 0 0 105520 0 0 325700; hub mass and inertia; "re_tuned by Anyd 20/2/13" + begin timoschenko_input; + filename ./data/dtu_10mw_rwt_shaft_st.dat; + set 1 1; + end timoschenko_input; + begin c2_def; Definition of centerline (main_body coordinates) + nsec 5; + sec 1 0 0 0 0; Tower top x,y,z,twist + sec 2 0 0 1.5 0; + sec 3 0 0 3 0; + sec 4 0 0 4.4 0; Main bearing + sec 5 0 0 7.1 0; Rotor centre + end c2_def; + end main_body; ; + begin main_body; + name hub1; + type timoschenko; + nbodies 1; + node_distribution c2_def; + damping_posdef 0 0 0 3e-06 3e-06 2e-05; "changed by Larh" + begin timoschenko_input; + filename ./data/dtu_10mw_rwt_hub_st.dat; + set 1 2; + end timoschenko_input; + begin c2_def; Definition of centerline (main_body coordinates) + nsec 2; + sec 1 0 0 0 0; x,y,z,twist + sec 2 0 0 2.8 0; + end c2_def; + end main_body; ; + begin main_body; + name hub2; + copy_main_body hub1; + end main_body; ; + begin main_body; + name hub3; + copy_main_body hub1; + end main_body; ; + begin main_body; + name blade1; + type timoschenko; + nbodies 10; + node_distribution c2_def; + damping_posdef 0 0 0 0.00153 0.00255 0.00033; " 3% damping tuned by tkim 23/03/13 unable to fit 3rd and higher mode" + begin timoschenko_input; + filename ./data/dtu_10mw_rwt_blade_st.dat; + set 1 1; set subset + end timoschenko_input; + begin c2_def; Definition of centerline (main_body coordinates) + nsec 27; + sec 1 0 7.006e-05 4.44089e-16 -14.5; + sec 2 -2.06477e-05 -0.0122119 3 -14.5; + sec 3 -0.0072881 -0.0249251 6 -14.4851; + sec 4 -0.0189235 -0.0273351 7.00004 -14.461; + sec 5 -0.0541282 -0.0282163 8.70051 -14.3388; + sec 6 -0.126633 -0.021321 10.402 -14.0201; + sec 7 -0.225666 -0.0128378 12.2046 -13.3904; + sec 8 -0.288563 -0.00770659 13.2065 -12.9371; + sec 9 -0.399194 -0.00488317 15.01 -11.9445; + sec 10 -0.576634 -0.0180296 18.2151 -9.98243; + sec 11 -0.707136 -0.0501772 21.4178 -8.45147; + sec 12 -0.791081 -0.0941228 24.6189 -7.46417; + sec 13 -0.837195 -0.14888 27.8193 -6.72916; + sec 14 -0.853948 -0.214514 31.0194 -6.08842; + sec 15 -0.849367 -0.290618 34.2197 -5.49322; + sec 16 -0.79392 -0.462574 40.2204 -4.39222; + sec 17 -0.716284 -0.688437 46.6217 -3.09315; + sec 18 -0.634358 -0.960017 53.0232 -1.75629; + sec 19 -0.553179 -1.28424 59.4245 -0.50065; + sec 20 -0.475422 -1.66402 65.8255 0.601964; + sec 21 -0.40318 -2.10743 72.2261 1.5556; + sec 22 -0.330085 -2.6563 79.0266 2.51935; + sec 23 -0.31014 -2.78882 80.5267 2.7295; + sec 24 -0.286719 -2.92517 82.0271 2.93201; + sec 25 -0.255823 -3.06577 83.5274 3.11874; + sec 26 -0.207891 -3.20952 85.0277 3.28847; + sec 27 -0.089894 -3.33685 86.3655 3.42796; + end c2_def; + end main_body; ; + begin main_body; + name blade2; + copy_main_body blade1; + end main_body; ; + begin main_body; + name blade3; + copy_main_body blade1; + end main_body; ;------------------------------------------------------------------------------------------------------------------------------- +; + begin orientation; + begin base; + body tower; + inipos 0 0 0; initial position of node 1 + body_eulerang 0 0 0; + end base; ; + begin relative; + body1 tower last; + body2 towertop 1; + body2_eulerang 0 0 0; + end relative; ; + begin relative; + body1 towertop last; + body2 shaft 1; + body2_eulerang 90 0 0; + body2_eulerang 5 0 0; 5 deg tilt angle + body2_eulerang 0 0 0; + mbdy2_ini_rotvec_d1 0 0 -1 0.7; mbdy2_ini_rotvec_d1 0.0 0.0 -1.0 [init_wr]; + end relative; ; + begin relative; + body1 shaft last; + body2 hub1 1; + body2_eulerang -90 0 0; + body2_eulerang 0 180 0; + body2_eulerang 2.5 0 0; 2.5deg cone angle + end relative; ; + begin relative; + body1 shaft last; + body2 hub2 1; + body2_eulerang -90 0 0; + body2_eulerang 0 60 0; + body2_eulerang 2.5 0 0; 2.5deg cone angle + end relative; ; + begin relative; + body1 shaft last; + body2 hub3 1; + body2_eulerang -90 0 0; + body2_eulerang 0 -60 0; + body2_eulerang 2.5 0 0; 2.5deg cone angle + end relative; ; + begin relative; + body1 hub1 last; + body2 blade1 1; + body2_eulerang 0 0 0; + end relative; ; + begin relative; + body1 hub2 last; + body2 blade2 1; + body2_eulerang 0 0 0; + end relative; ; + begin relative; + body1 hub3 last; + body2 blade3 1; + body2_eulerang 0 0 0; + end relative; ; + end orientation; ;------------------------------------------------------------------------------------------------------------------------------- + begin constraint; ; + begin fix0; fixed to ground in translation and rotation of node 1 + body tower; + end fix0; ; + begin fix1; + body1 tower last; + body2 towertop 1; + end fix1; ; + begin bearing1; free bearing + name shaft_rot; + body1 towertop last; + body2 shaft 1; + bearing_vector 2 0 0 -1; x=coo (0=global.1=body1.2=body2) vector in body2 coordinates where the free rotation is present + end bearing1; ; + begin fix1; + body1 shaft last; + body2 hub1 1; + end fix1; ; + begin fix1; + body1 shaft last; + body2 hub2 1; + end fix1; ; + begin fix1; + body1 shaft last; + body2 hub3 1; + end fix1; ; + begin bearing2; + name pitch1; + body1 hub1 last; + body2 blade1 1; + bearing_vector 2 0 0 -1; + end bearing2; ; + begin bearing2; + name pitch2; + body1 hub2 last; + body2 blade2 1; + bearing_vector 2 0 0 -1; + end bearing2; ; + begin bearing2; + name pitch3; + body1 hub3 last; + body2 blade3 1; + bearing_vector 2 0 0 -1; + end bearing2; + end constraint; ; + end new_htc_structure; ;---------------------------------------------------------------------------------------------------------------------------------------------------------------- + begin wind; + density 1.225; + wsp 4; + tint 0; + horizontal_input 1; + windfield_rotations 0 0 0; yaw, tilt, rotation + center_pos0 0 0 -119; hub heigth + shear_format 1 0.2; + turb_format 0; 0=none, 1=mann,2=flex + tower_shadow_method 0; 0=none, 1=potential flow, 2=jet + scale_time_start 0; + wind_ramp_factor 0 40 0.6 1; ; Steps ; + wind_ramp_abs 140 141 0 1; wsp. after the step: 5.0 + wind_ramp_abs 181 182 0 1; wsp. after the step: 6.0 + wind_ramp_abs 222 223 0 1; wsp. after the step: 7.0 + wind_ramp_abs 263 264 0 1; wsp. after the step: 8.0 + wind_ramp_abs 304 305 0 1; wsp. after the step: 9.0 + wind_ramp_abs 345 346 0 1; wsp. after the step: 10.0 + wind_ramp_abs 386 387 0 1; wsp. after the step: 11.0 + wind_ramp_abs 427 428 0 1; wsp. after the step: 12.0 + wind_ramp_abs 468 469 0 1; wsp. after the step: 13.0 + wind_ramp_abs 509 510 0 1; wsp. after the step: 14.0 + wind_ramp_abs 550 551 0 1; wsp. after the step: 15.0 + wind_ramp_abs 591 592 0 1; wsp. after the step: 16.0 + wind_ramp_abs 632 633 0 1; wsp. after the step: 17.0 + wind_ramp_abs 673 674 0 1; wsp. after the step: 18.0 + wind_ramp_abs 714 715 0 1; wsp. after the step: 19.0 + wind_ramp_abs 755 756 0 1; wsp. after the step: 20.0 + wind_ramp_abs 796 797 0 1; wsp. after the step: 21.0 + wind_ramp_abs 837 838 0 1; wsp. after the step: 22.0 + wind_ramp_abs 878 879 0 1; wsp. after the step: 23.0 + wind_ramp_abs 919 920 0 1; wsp. after the step: 24.0 + wind_ramp_abs 960 961 0 1; wsp. after the step: 25.0 +; + begin tower_shadow_potential_2; + tower_mbdy_link tower; + nsec 2; + radius 0 4.15; + radius 115.63 2.75; + end tower_shadow_potential_2; + end wind; ; + begin aerodrag; + begin aerodrag_element; + mbdy_name tower; + aerodrag_sections uniform 10; + nsec 2; + sec 0 0.6 8.3; tower bottom + sec 115.63 0.6 5.5; tower top + end aerodrag_element; ; + begin aerodrag_element; Nacelle drag side + mbdy_name shaft; + aerodrag_sections uniform 2; + nsec 2; + sec 0 0.8 10; + sec 7.01 0.8 10; + end aerodrag_element; + end aerodrag; ; + begin aero; + nblades 3; + hub_vec shaft -3; rotor rotation vector (normally shaft composant directed from pressure to sustion side) + link 1 mbdy_c2_def blade1; + link 2 mbdy_c2_def blade2; + link 3 mbdy_c2_def blade3; + ae_filename ./data/dtu_10mw_rwt_ae.dat; + pc_filename ./data/dtu_10mw_rwt_pc.dat; + induction_method 1; 0=none, 1=normal + aerocalc_method 1; 0=ingen aerodynamic, 1=med aerodynamic + aerosections 50; def. 50 + ae_sets 1 1 1; + tiploss_method 1; 0=none, 1=prandtl + dynstall_method 2; 0=none, 1=stig øye method,2=mhh method +; + end aero; ;------------------------------------------------------------------------------------------------- + ; begin dll; ; + ; begin type2_dll; + ; name risoe_controller; + ; filename ./contro_controller.dll; + ; dll_subroutine_init init_regulation; + ; dll_subroutine_update update_regulation; + ; arraysizes_init 52 1; + ; arraysizes_update 12 100; + ; begin init; ; Overall parameters + ; constant 1 10000; Rated power [kW] + ; constant 2 0.5236; Minimum rotor speed [rad/s] + ; constant 3 1.005; Rated rotor speed [rad/s] + ; constant 4 15600000; Maximum allowable generator torque [Nm] + ; constant 5 100; Minimum pitch angle, theta_min [deg], +; ; if |theta_min|>90, then a table of <wsp,theta_min> is read ; +; ; from a file named 'wptable.n', where n=int(theta_min) + ; constant 6 82; Maximum pitch angle [deg] + ; constant 7 10; Maximum pitch velocity operation [deg/s] + ; constant 8 0.4; Frequency of generator speed filter [Hz] + ; constant 9 0.7; Damping ratio of speed filter [-] + ; constant 10 1.92; Frequency of free-free DT torsion mode [Hz], if zero no notch filter used +; ; Partial load control parameters + ; constant 11 11750000; Optimal Cp tracking K factor [Nm/(rad/s)^2], ; +; ; Qg=K*Omega^2, K=eta*0.5*rho*A*Cp_opt*R^3/lambda_opt^3 + ; constant 12 70840000; Proportional gain of torque controller [Nm/(rad/s)] + ; constant 13 15900000; Integral gain of torque controller [Nm/rad] + ; constant 14 0; Differential gain of torque controller [Nm/(rad/s^2)] +; ; Full load control parameters + ; constant 15 2; Generator control switch [1=constant power, 2=constant torque] + ; constant 16 1.304; Proportional gain of pitch controller [rad/(rad/s)] + ; constant 17 0.3511; Integral gain of pitch controller [rad/rad] + ; constant 18 0; Differential gain of pitch controller [rad/(rad/s^2)] + ; constant 19 4e-09; Proportional power error gain [rad/W] + ; constant 20 4e-09; Integral power error gain [rad/(Ws)] + ; constant 21 11.35; Coefficient of linear term in aerodynamic gain scheduling, KK1 [deg] + ; constant 22 400.7; Coefficient of quadratic term in aerodynamic gain scheduling, KK2 [deg^2] & +; ; (if zero, KK1 = pitch angle at double gain) + ; constant 23 1.3; Relative speed for double nonlinear gain [-] +; ; Cut-in simulation parameters + ; constant 24 -1; Cut-in time [s] + ; constant 25 1; Time delay for soft start of torque [1/1P] +; ; Cut-out simulation parameters + ; constant 26 1500; Cut-out time [s] + ; constant 27 5; Time constant for linear torque cut-out [s] + ; constant 28 1; Stop type [1=normal, 2=emergency] + ; constant 29 1; Time delay for pitch stop after shut-down signal [s] + ; constant 30 3; Maximum pitch velocity during initial period of stop [deg/s] + ; constant 31 3; Time period of initial pitch stop phase [s] (maintains pitch speed specified in constant 30) + ; constant 32 4; Maximum pitch velocity during final phase of stop [deg/s] +; ; Expert parameters (keep default values unless otherwise given) + ; constant 33 2; Lower angle above lowest minimum pitch angle for switch [deg] + ; constant 34 2; Upper angle above lowest minimum pitch angle for switch [deg], if equal then hard switch + ; constant 35 95; Ratio between filtered speed and reference speed for fully open torque limits [%] + ; constant 36 2; Time constant of 1st order filter on wind speed used for minimum pitch [1/1P] + ; constant 37 1; Time constant of 1st order filter on pitch angle used for gain scheduling [1/1P] +; ; Drivetrain damper + ; constant 38 0; Proportional gain of active DT damper [Nm/(rad/s)], requires frequency in input 10 +; ; Over speed + ; constant 39 25; Overspeed percentage before initiating turbine controller alarm (shut-down) [%] +; ; Additional non-linear pitch control term (not used when all zero) + ; constant 40 0; Err0 [rad/s] + ; constant 41 0; ErrDot0 [rad/s^2] + ; constant 42 0; PitNonLin1 [rad/s] +; ; Storm control command + ; constant 43 28; Wind speed 'Vstorm' above which derating of rotor speed is used [m/s] + ; constant 44 28; Cut-out wind speed (only used for derating of rotor speed in storm) [m/s] +; ; Safety system parameters + ; constant 45 300; Overspeed percentage before initiating safety system alarm (shut-down) [%] + ; constant 46 1.5; Max low-pass filtered tower top acceleration level [m/s^2] +; ; Turbine parameter + ; constant 47 178; Nominal rotor diameter [m] +; ; Parameters for rotor inertia reduction in variable speed region + ; constant 48 0; Proportional gain on rotor acceleration in variable speed region [Nm/(rad/s^2)] (not used when zero) +; ; Parameters for alternative partial load controller with PI regulated TSR tracking + ; constant 49 0; Optimal tip speed ratio [-] (only used when K=constant 11 = 0 otherwise Qg=K*Omega^2 is used) +; ; Parameters for adding aerodynamic drivetrain damping on gain scheduling + ; constant 50 0; Proportional gain of aerodynamic DT damping [Nm/(rad/s)] + ; constant 51 0; Coefficient of linear term in aerodynamic DT damping scheduling, KK1 [deg] + ; constant 52 0; Coefficient of quadratic term in aerodynamic DT damping scheduling, KK2 [deg^2] + ; end init; ; + ; begin output; + ; general time; [s] + ; constraint bearing1 shaft_rot 1 only 2; Drivetrain speed [rad/s] + ; constraint bearing2 pitch1 1 only 1; [rad] + ; constraint bearing2 pitch2 1 only 1; [rad] + ; constraint bearing2 pitch3 1 only 1; [rad] + ; wind free_wind 1 0 0 -119; Global coordinates at hub height + ; dll inpvec 2 2; Elec. power from generator servo .dll + ; dll inpvec 2 8; Grid state flag from generator servo .dll + ; mbdy state acc tower 10 1 global only 1; Tower top x-acceleration [m/s^2] + ; mbdy state acc tower 10 1 global only 2; Tower top y-acceleration [m/s^2] + ; end output; + ; end type2_dll; ; + ; begin type2_dll; + ; name generator_servo; + ; filename ./control/generator_servo.dll; + ; dll_subroutine_init init_generator_servo; + ; dll_subroutine_update update_generator_servo; + ; arraysizes_init 7 1; + ; arraysizes_update 4 8; + ; begin init; + ; constant 1 20; Frequency of 2nd order servo model of generator-converter system [Hz] + ; constant 2 0.9; Damping ratio 2nd order servo model of generator-converter system [-] + ; constant 3 15600000; Maximum allowable LSS torque (pull-out torque) [Nm] + ; constant 4 0.94; Generator efficiency [-] + ; constant 5 1; Gearratio [-] + ; constant 6 0; Time for half value in softstart of torque [s] + ; constant 7 1500; Time for grid loss [s] + ; end init; ; + ; begin output; + ; general time; Time [s] + ; dll inpvec 1 1; Electrical torque reference [Nm] + ; constraint bearing1 shaft_rot 1 only 2; Generator LSS speed [rad/s] + ; mbdy momentvec shaft 1 1 shaft only 3; Shaft moment [kNm] (Qshaft) + ; end output; +; ; + ; begin actions; + ; mbdy moment_int shaft 1 -3 shaft towertop 2; Generator LSS torque [Nm] + ; end actions; + ; end type2_dll; ; + ; begin type2_dll; + ; name mech_brake; + ; filename ./control/mech_brake.dll; + ; dll_subroutine_init init_mech_brake; + ; dll_subroutine_update update_mech_brake; + ; arraysizes_init 7 1; + ; arraysizes_update 4 6; + ; begin init; + ; constant 1 2727252; Fully deployed maximum brake torque [Nm] + ; constant 2 100; Parameter alpha used in Q = tanh(omega*alpha), typically 1e2/Omega_nom + ; constant 3 0.625; Delay time for before brake starts to deploy [s] - from 5MW*1P_5/1P_10 + ; constant 4 0.75; Time for brake to become fully deployed [s] + ; end init; ; + ; begin output; + ; general time; Time [s] + ; constraint bearing1 shaft_rot 1 only 2; Generator LSS speed [rad/s] + ; dll inpvec 1 25; Command to deploy mechanical disc brake [0,1] + ; end output; +; ; + ; begin actions; + ; mbdy moment_int shaft 1 3 shaft towertop 2; Brake LSS torque [Nm] + ; end actions; + ; end type2_dll; ; + ; begin type2_dll; + ; name servo_with_limits; + ; filename ./control/servo_with_limits.dll; + ; dll_subroutine_init init_servo_with_limits; + ; dll_subroutine_update update_servo_with_limits; + ; arraysizes_init 10 1; + ; arraysizes_update 5 9; + ; begin init; + ; constant 1 3; Number of blades [-] + ; constant 2 1; Frequency of 2nd order servo model of pitch system [Hz] + ; constant 3 0.7; Damping ratio 2nd order servo model of pitch system [-] + ; constant 4 10; Max. pitch speed [deg/s] + ; constant 5 15; Max. pitch acceleration [deg/s^2] + ; constant 6 -5; Min. pitch angle [deg] + ; constant 7 90; Max. pitch angle [deg] + ; constant 8 1500; Time for pitch runaway [s] + ; constant 9 1500; Time for stuck blade 1 [s] + ; constant 10 0; Angle of stuck blade 1 [deg] + ; end init; + ; begin output; + ; general time; Time [s] + ; dll inpvec 1 2; Pitch1 demand angle [rad] + ; dll inpvec 1 3; Pitch2 demand angle [rad] + ; dll inpvec 1 4; Pitch3 demand angle [rad] + ; dll inpvec 1 26; Flag for emergency pitch stop [0=off/1=on] + ; end output; +; ; + ; begin actions; + ; constraint bearing2 angle pitch1; Angle pitch1 bearing [rad] + ; constraint bearing2 angle pitch2; Angle pitch2 bearing [rad] + ; constraint bearing2 angle pitch3; Angle pitch3 bearing [rad] + ; end actions; + ; end type2_dll; ; +; ; --- DLL for tower-blade tip distance -- ; + ; begin type2_dll; + ; name disttowtip; + ; filename ./control/towclearsens.dll; + ; dll_subroutine_init initialize; + ; dll_subroutine_update update; + ; arraysizes_init 1 1; + ; arraysizes_update 12 4; + ; begin init; + ; constant 1 2.66; Tower radius close to downward blade tip [m] + ; end init; + ; begin output; + ; mbdy state pos tower 3 0.62 global; [1,2,3]. Tower position: 30.18 m + ; mbdy state pos blade1 26 1 global; [4,5,6] + ; mbdy state pos blade2 26 1 global; [7,8,9] + ; mbdy state pos blade3 26 1 global; [10,11,12] + ; end output; + ; end type2_dll; + ; end dll; ;---------------------------------------------------------------------------------------------------------------------------------------------------------------- +; + begin output; + filename ../output/res/test_no_turb; ; time 99.0 1000.0 ; +; data_format hawc_ascii; + data_format hawc_binary; + buffer 1; ; + general time; + constraint bearing1 shaft_rot 2; angle and angle velocity + constraint bearing2 pitch1 5; angle and angle velocity + constraint bearing2 pitch2 5; angle and angle velocity + constraint bearing2 pitch3 5; angle and angle velocity + aero omega; + aero torque; + aero power; + aero thrust; + wind free_wind 1 0 0 -119; local wind at fixed position: coo (1=global,2=non-rotation rotor coo.), pos x, pos y, pos z +; Moments: + mbdy momentvec tower 1 1 tower # tower base; + mbdy momentvec tower 10 2 tower # tower yaw bearing; + mbdy momentvec shaft 4 1 shaft # main bearing; + mbdy momentvec blade1 2 2 blade1 # blade 1 root; + mbdy momentvec blade2 2 2 blade2 # blade 2 root; + mbdy momentvec blade3 2 2 blade3 # blade 3 root; + mbdy momentvec blade1 13 1 local # blade 1 50% local e coo; + mbdy momentvec blade2 13 1 local # blade 2 50% local e coo; + mbdy momentvec blade3 13 1 local # blade 3 50% local e coo; +; Displacements and accellerations + mbdy state pos tower 10 1 global only 1 # tower top fa displ; + mbdy state pos tower 10 1 global only 2 # tower top ss displ; + mbdy state acc tower 10 1 global only 1 # tower top fa acc; + mbdy state acc tower 10 1 global only 2 # tower top ss acc; +; + mbdy state pos blade1 26 1 blade1 # blade 1 tip pos; + mbdy state pos blade2 26 1 blade2 # blade 2 tip pos; + mbdy state pos blade3 26 1 blade3 # blade 3 tip pos; + mbdy state pos blade1 26 1 global # gl blade 1 tip pos; +; - Monitor Aerodynamics - ; + aero windspeed 3 1 1 72.5; + aero alfa 1 72.5; + aero alfa 2 72.5; + aero alfa 3 72.5; + aero cl 1 72.5; + aero cl 2 72.5; + aero cl 3 72.5; + aero cd 1 72.5; + aero cd 2 72.5; + aero cd 3 72.5; +; - Main Controller - +; Output to controller +; dll outvec 1 1 # time; +; dll outvec 1 2 # slow speed shaft rad/s; +; dll outvec 1 3 # pitch angle 1; +; dll outvec 1 4 # pitch angle 2; +; dll outvec 1 5 # pitch angle 3; +; dll outvec 1 6 # WSP_x_global; +; dll outvec 1 7 # WSP_y_global; +; dll outvec 1 8 # WSP_z_global; +; dll outvec 1 9 # Elec. pwr ; +; dll outvec 1 10 # Grid flag ; +; Input from controller + dll inpvec 1 1 # generator torque reference [nm]; + dll inpvec 1 2 # pitch angle reference of blade 1 [rad]; + dll inpvec 1 3 # pitch angle reference of blade 2 [rad]; + dll inpvec 1 4 # pitch angle reference of blade 3 [rad]; + dll inpvec 1 5 # power reference [w]; + dll inpvec 1 6 # filtered wind speed [m/s]; + dll inpvec 1 7 # filtered rotor speed [rad/s]; + dll inpvec 1 8 # filtered rotor speed error for torque [rad/s]; + dll inpvec 1 9 # bandpass filtered rotor speed [rad/s]; + dll inpvec 1 10 # proportional term of torque contr. [nm]; + dll inpvec 1 11 # integral term of torque controller [nm]; + dll inpvec 1 12 # minimum limit of torque [nm]; + dll inpvec 1 13 # maximum limit of torque [nm]; + dll inpvec 1 14 # torque limit switch based on pitch [-]; + dll inpvec 1 15 # filtered rotor speed error for pitch [rad/s]; + dll inpvec 1 16 # power error for pitch [w]; + dll inpvec 1 17 # proportional term of pitch controller [rad]; + dll inpvec 1 18 # integral term of pitch controller [rad]; + dll inpvec 1 19 # minimum limit of pitch [rad]; + dll inpvec 1 20 # maximum limit of pitch [rad]; + dll inpvec 1 21 # torque reference from dt dammper [nm]; + dll inpvec 1 22 # status signal [-]; + dll inpvec 1 23 # total added pitch rate [rad/s]; + dll inpvec 1 24 # filtered mean pitch for gain sch [rad]; + dll inpvec 1 25 # flag for mechnical brake [0=off/1=on]; + dll inpvec 1 26 # flag for emergency pitch stop [0=off/1=on]; + dll inpvec 1 27 # lp filtered acceleration level [m/s^2]; +; ; Output to generator model +; dll outvec 2 1 # time ; +; dll outvec 2 2 # Electrical torque reference [Nm] ; +; dll outvec 2 3 # omega LSS ; +; Input from generator model + dll inpvec 2 1 # mgen lss [nm]; + dll inpvec 2 2 # pelec w; + dll inpvec 2 3 # mframe; + dll inpvec 2 4 # mgen hss; + dll inpvec 2 5 # generator pmech kw; + dll inpvec 2 6 # filtered gen speed; + dll inpvec 2 7 # elec. pwr; + dll inpvec 2 8 # grid flag; +; Output to mechanical brake + dll inpvec 3 1 # brake torque [nm]; +; ; Input from mechanical brake +; dll outvec 3 1 # Time [s] ; +; dll outvec 3 2 # Generator LSS speed [rad/s] ; +; dll outvec 3 3 # Deploy brake ; +; ; Output to pitch servo +; dll outvec 4 1 # time; +; dll outvec 4 2 # pitchref 1; +; dll outvec 4 3 # pitchref 2; +; dll outvec 4 4 # pitchref 3; +; dll outvec 4 5 # Emerg. stop; +; Input from pitch servo + dll inpvec 4 1 # pitch 1; + dll inpvec 4 2 # pitch 2; + dll inpvec 4 3 # pitch 3; +; Check tower clearence + dll inpvec 5 1 # bltip tow min d [m]; + end output; +; + exit; diff --git a/wetb/hawc2/tests/test_htc_file.py b/wetb/hawc2/tests/test_htc_file.py index 62d640e..74ac9f0 100644 --- a/wetb/hawc2/tests/test_htc_file.py +++ b/wetb/hawc2/tests/test_htc_file.py @@ -237,10 +237,15 @@ end turb_export;""" './data/DTU_10MW_RWT_ae.dat', './data/DTU_10MW_RWT_pc.dat', './control/risoe_controller.dll', + './control/risoe_controller_64.dll', './control/generator_servo.dll', + './control/generator_servo_64.dll', './control/mech_brake.dll', + './control/mech_brake_64.dll', './control/servo_with_limits.dll', + './control/servo_with_limits_64.dll', './control/towclearsens.dll', + './control/towclearsens_64.dll', './data/user_shear.dat', self.testfilepath.replace("\\", "/") + 'test.htc' ]: @@ -344,6 +349,21 @@ end turb_export;""" - sensor2 2;""" assert s.strip() == ref + def test_pbs_file(self): + htc = HTCFile(self.testfilepath + "../simulation_setup/DTU10MWRef6.0/htc/DTU_10MW_RWT.htc") + assert os.path.relpath(htc.modelpath, self.testfilepath) == os.path.relpath( + "../simulation_setup/DTU10MWRef6.0/") + from wetb.hawc2.hawc2_pbs_file import JESS_WINE32_HAWC2MB + htc.pbs_file(r"R:\HAWC2_tests\v12.6_mmpe3\hawc2\win32", JESS_WINE32_HAWC2MB) + + def test_pbs_file_inout(self): + htc = HTCFile(self.testfilepath + "../simulation_setup/DTU10MWRef6.0_IOS/input/htc/DTU_10MW_RWT.htc") + assert os.path.relpath(htc.modelpath, self.testfilepath) == os.path.relpath( + "../simulation_setup/DTU10MWRef6.0_IOS/input") + from wetb.hawc2.hawc2_pbs_file import JESS_WINE32_HAWC2MB + print(htc.pbs_file(r"R:\HAWC2_tests\v12.6_mmpe3\hawc2\win32", + JESS_WINE32_HAWC2MB, input_files=["./input/*"], output_files=['./output/*'])) + if __name__ == "__main__": #import sys;sys.argv = ['', 'Test.testName'] diff --git a/wetb/utils/cluster_tools/os_path.py b/wetb/utils/cluster_tools/os_path.py new file mode 100644 index 0000000..4868d85 --- /dev/null +++ b/wetb/utils/cluster_tools/os_path.py @@ -0,0 +1,31 @@ + +import os + + +def repl(path): + return path.replace("\\", "/") + + +def abspath(path): + return repl(os.path.abspath(path)) + + +def relpath(path, start=None): + return repl(os.path.relpath(path, start)) + + +def pjoin(*path): + return repl(os.path.join(*path)) + + +def cluster_path(path): + try: + import win32wnet + drive, folder = os.path.splitdrive(abspath(path)) + path = abspath(win32wnet.WNetGetUniversalName(drive, 1) + folder) + except Exception: + path = repl(path) + path = path.replace("//jess.dtu.dk", "/home") + path = path.replace("//mimer.risoe.dk/aiolos", "/mnt/aiolos") + path = path.replace("//mimer.risoe.dk", "/mnt/mimer") + return path diff --git a/wetb/utils/cluster_tools/pbsfile.py b/wetb/utils/cluster_tools/pbsfile.py new file mode 100644 index 0000000..7f1a64d --- /dev/null +++ b/wetb/utils/cluster_tools/pbsfile.py @@ -0,0 +1,191 @@ +import os +import inspect +from wetb.utils.cluster_tools.os_path import cluster_path, pjoin + + +class Template(): + + def __init__(self, template): + self.template = template + + def __call__(self, **kwargs): + s = self.template + found = True + while found: + found = False + for k, v in dict(kwargs).items(): + if "[%s]" % k in s: + found = True + s = s.replace("[%s]" % k, str(v)) + return s + + +pbs_template = Template('''### Jobid +#PBS -N [jobname] +### Standard Output +#PBS -o [stdout_filename] +[stderr] +#PBS -W umask=0003 +### Maximum wallclock time format HOURS:MINUTES:SECONDS +#PBS -l walltime=[walltime] +#PBS -l nodes=[nodes]:ppn=[ppn] +### Queue name +#PBS -q [queue] +cd [workdir] +mkdir -p stdout +pwd +[commands] +exit +''') + + +class PBSFile(): + _walltime = "00:30:00" + + def __init__(self, workdir, jobname, commands, queue='workq', walltime='00:10:00', nodes=1, ppn=1, merge_std=True): + """Description + + Parameters + ---------- + walltime : int, str + wall time as string ("hh:mm:ss") or second (integer) + + """ + self.workdir = workdir + self.jobname = jobname + self.commands = commands + self.queue = queue + self.walltime = walltime + self.nodes = nodes + self.ppn = ppn + self.merge_std = merge_std + self.stdout_filename = pjoin(workdir, './stdout/%s.out' % jobname) + self.filename = "pbs_in/%s.in" % self.jobname + + @property + def walltime(self): + return self._walltime + + @walltime.setter + def walltime(self, walltime): + if isinstance(walltime, (float, int)): + from math import ceil + h = walltime // 3600 + m = (walltime % 3600) // 60 + s = ceil(walltime % 60) + self._walltime = "%02d:%02d:%02d" % (h, m, s) + else: + self._walltime = walltime + + def __str__(self): + if self.merge_std: + stderr = "### merge stderr into stdout\n#PBS -j oe" + else: + stderr = "### Standard Error\n#PBS -e ./err/[jobname].err" + if callable(self.commands): + commands = self.commands() + else: + commands = self.commands + return pbs_template(workdir=cluster_path(self.workdir), + stdout_filename=cluster_path(self.stdout_filename), + stderr=stderr, + jobname=self.jobname, + queue=self.queue, + walltime=self.walltime, + nodes=self.nodes, + ppn=self.ppn, + commands=commands) + + def save(self, model_path=None, filename=None): + model_path = model_path or self.workdir + self.filename = filename or self.filename + filename = os.path.join(model_path, self.filename) + os.makedirs(os.path.dirname(filename), exist_ok=True) + with open(filename, 'w', newline='\n') as fid: + fid.write(str(self)) + + +multirunner_template = Template("""echo "[make_dict] +" | python + +for node in `cat $PBS_NODEFILE | sort | uniq` +do + + ssh -T $node << EOF & +cd [workdir] +python -c "[start_jobs] +" +EOF +done +wait +""") + + +class PBSMultiRunner(PBSFile): + def __init__(self, workdir, queue='workq', walltime='01:00:00', nodes=1, ppn=1, merge_std=True): + commands = multirunner_template(make_dict=self.get_src(self.make_dict), + start_jobs=self.get_src(self.start_jobs), + workdir=cluster_path(workdir)).replace("self.ppn", str(ppn)) + jobname = "%s" % os.path.basename(os.path.abspath(workdir)) + jobname = 'pbs_multirunner' + PBSFile.__init__(self, workdir, jobname, commands, queue, walltime=walltime, + nodes=nodes, ppn=ppn, merge_std=merge_std) + self.filename = "%s.all" % self.jobname + + def make_dict(self): + import os + import glob + import numpy as np + from pathlib import Path + import re + + # find available nodes + with open(os.environ['PBS_NODEFILE']) as fid: + files = set([f.strip() for f in fid.readlines() if f.strip() != '']) + pbs_files = glob.glob('./**/*.in', recursive=True) + + # Make a list of [(pbs_in_filename, stdout_filename, walltime),...] + pat = re.compile(r'[\s\S]*#\s*PBS\s+-o\s+(.*)[\s\S]*(\d\d:\d\d:\d\d)[\s\S]*') + + def get_info(f): + try: + return (f,) + pat.match(Path(f).read_text()).groups() + except Exception: + return (f, f.replace('.in', '.out'), '00:30:00') + pbs_info_lst = map(get_info, pbs_files) + + # sort wrt walltime + pbs_info_lst = sorted(pbs_info_lst, key=lambda fow: tuple(map(int, fow[2].split(':'))))[::-1] + # make dict {node1: pbs_info_lst1, ...} and save + d = {f: pbs_info_lst[i::len(files)] for i, f in enumerate(files)} + with open('pbs.dict', 'w') as fid: + fid.write(str(d)) + + def start_jobs(self): + import os + from pathlib import Path + import multiprocessing + import platform + import time + + pbs_info_lst = eval(Path('pbs.dict').read_text())[platform.node()] + arg_lst = ['echo starting %s && mkdir -p %s && env PBS_JOBID=$PBS_JOBID %s &> %s && echo finished %s' % + (f, os.path.dirname(o), f, o, f) for f, o, _ in pbs_info_lst] + print(arg_lst[0]) + print('Starting %d jobs on %s' % (len(arg_lst), platform.node())) + pool = multiprocessing.Pool(os.environ['PBS_NUM_PPN']) + res = pool.map_async(os.system, arg_lst) + t = time.time() + for (f, _, _), r in zip(pbs_info_lst, res.get()): + print('%-50s\t%s' % (f, ('Errorcode %d' % r, 'Done')[r == 0])) + print('Done %d jobs on %s in %ds' % (len(arg_lst), platform.node(), time.time() - t)) + + def get_src(self, func): + src_lines = inspect.getsource(func).split("\n")[1:] + indent = len(src_lines[0]) - len(src_lines[0].lstrip()) + return "\n".join([l[indent:] for l in src_lines]) + + +if __name__ == '__main__': + pbsmr = PBSMultiRunner(workdir="W:/simple1", queue='workq', nodes=2, ppn=10) + pbsmr.save("w:/simple1") diff --git a/wetb/utils/cluster_tools/pbsfile_hawc2.py b/wetb/utils/cluster_tools/pbsfile_hawc2.py new file mode 100644 index 0000000..19490f2 --- /dev/null +++ b/wetb/utils/cluster_tools/pbsfile_hawc2.py @@ -0,0 +1,208 @@ +from wetb.hawc2.htc_file import HTCFile +import os +from os import path + +pbs_template = '''### Standard Output +#PBS -N [jobname] +#PBS -o [pbsoutdir]/[jobname].out +### Standard Error +#PBS -e [pbsoutdir]/[jobname].err +#PBS -W umask=0003 +### Maximum wallclock time format HOURS:MINUTES:SECONDS +#PBS -l walltime=[walltime] +#PBS -l nodes=1:ppn=1 +### Queue name +#PBS -q workq + +# ============================================================================== +# single PBS mode: one case per PBS job +# evaluates to true if LAUNCH_PBS_MODE is NOT set +if [ -z ${LAUNCH_PBS_MODE+x} ] ; then + ### Create scratch directory and copy data to it + cd $PBS_O_WORKDIR + echo "current working dir (pwd):" + pwd + cp -R ./[modelzip] /scratch/$USER/$PBS_JOBID +fi +# ============================================================================== + + +# ============================================================================== +# single PBS mode: one case per PBS job +# evaluates to true if LAUNCH_PBS_MODE is NOT set +if [ -z ${LAUNCH_PBS_MODE+x} ] ; then + echo + echo 'Execute commands on scratch nodes' + cd /scratch/$USER/$PBS_JOBID + # create unique dir for each CPU + mkdir "1"; cd "1" + pwd + /usr/bin/unzip ../[modelzip] + mkdir -p [htcdir] + mkdir -p [resdir] + mkdir -p [logdir] + mkdir -p [turbdir] + cp -R $PBS_O_WORKDIR/[htcdir]/[jobname].htc ./[htcdir] + cp -R $PBS_O_WORKDIR/[turbdir][turbfileroot]*.bin [turbdir] + _HOSTNAME_=`hostname` + if [[ ${_HOSTNAME_:0:1} == "j" ]] ; then + WINEARCH=win64 WINEPREFIX=~/.wine winefix + fi +# ============================================================================== + +# ------------------------------------------------------------------------------ +# find+xargs mode: 1 PBS job, multiple cases +else + # with find+xargs we first browse to CPU folder + cd "$CPU_NR" +fi +# ------------------------------------------------------------------------------ + +echo "" +# ============================================================================== +# single PBS mode: one case per PBS job +# evaluates to true if LAUNCH_PBS_MODE is NOT set +if [ -z ${LAUNCH_PBS_MODE+x} ] ; then + echo "execute HAWC2, fork to background" + time WINEARCH=win64 WINEPREFIX=~/.wine wine hawc2-latest ./[htcdir]/[jobname].htc & + wait +# ============================================================================== + +# ------------------------------------------------------------------------------ +# find+xargs mode: 1 PBS job, multiple cases +else + echo "execute HAWC2, do not fork and wait" + (time WINEARCH=win64 WINEPREFIX=~/.wine numactl --physcpubind=$CPU_NR wine hawc2-latest ./[htcdir]/[jobname].htc) 2>&1 | tee [pbsoutdir]/[jobname].err.out +fi +# ------------------------------------------------------------------------------ + + +### Epilogue +# ============================================================================== +# single PBS mode: one case per PBS job +# evaluates to true if LAUNCH_PBS_MODE is NOT set +if [ -z ${LAUNCH_PBS_MODE+x} ] ; then + ### wait for jobs to finish + wait + echo "" + echo "Copy back from scratch directory" + mkdir -p $PBS_O_WORKDIR/[resdir] + mkdir -p $PBS_O_WORKDIR/[logdir] + mkdir -p $PBS_O_WORKDIR/animation/ + mkdir -p $PBS_O_WORKDIR/[turbdir] + cp -R [resdir]. $PBS_O_WORKDIR/[resdir]. + cp -R [logdir]. $PBS_O_WORKDIR/[logdir]. + cp -R animation/. $PBS_O_WORKDIR/animation/. + + echo "" + echo "COPY BACK TURB IF APPLICABLE" + cd turb/ + for i in `ls *.bin`; do if [ -e $PBS_O_WORKDIR/[turbdir]$i ]; then echo "$i exists no copyback"; else echo "$i copyback"; cp $i $PBS_O_WORKDIR/[turbdir]; fi; done + cd /scratch/$USER/$PBS_JOBID/1/ + echo "END COPY BACK TURB" + echo "" + + echo "COPYBACK [copyback_files]/[copyback_frename]" + echo "END COPYBACK" + echo "" + echo "" + echo "following files are on node/cpu 1 (find .):" + find . +# ============================================================================== +# ------------------------------------------------------------------------------ +# find+xargs mode: 1 PBS job, multiple cases +else + cd /scratch/$USER/$PBS_JOBID/$CPU_NR/ + rsync -a --remove-source-files [resdir]. ../HAWC2SIM/[resdir]. + rsync -a --remove-source-files [logdir]. ../HAWC2SIM/[logdir]. + rsync -a --remove-source-files [pbsoutdir]/. ../HAWC2SIM/[pbsoutdir]/. + rsync -a --remove-source-files animation/. ../HAWC2SIM/animation/. + + echo "" + echo "COPY BACK TURB IF APPLICABLE" + cd turb/ + for i in `ls *.bin`; do if [ -e $PBS_O_WORKDIR/[turbdir]$i ]; then echo "$i exists no copyback"; else echo "$i copyback"; cp $i $PBS_O_WORKDIR/[turbdir]; fi; done + cd /scratch/$USER/$PBS_JOBID/$CPU_NR/ + echo "END COPY BACK TURB" + echo "" + + echo "COPYBACK [copyback_files]/[copyback_frename]" + echo "END COPYBACK" + echo "" +# ------------------------------------------------------------------------------ +fi +exit +''' + +def htc2pbs(htc_fn, walltime='00:40:00', zipfile=None): + """ + Creates a PBS launch file (.p) based on a HAWC2 .htc file. + - Assumes htc files are within a htc/[casename]/ directory relative to current directory. + - Assumes there is a .zip file in the current directory which contains the turbine model. + If there is none, the zip file is set to 'model.zip' by default + - Will place a .p fine in pbs_in/[casename]/ directory relative to current directory. + - + + Parameters + ---------- + htc_fn : str + The file name and path to the .htc file relative to current directory. + walltime: str (default='00:40:00') + A string indicating the walltime of the job of the form 'HH:MM:SS' + zipfile: str (default=None) + The filename of the zipfile containing the wind turbine model files and + HAWC2 executable. if zipfile=None, searches the current directory for a + zip file. If none is found, sets zipfile to 'model.zip' + + + Returns + ------- + str + The filename and path to the output .p file + + Raises + ------ + FileNotFoundError: If the file structure is not correct. + """ + + + + basename = path.relpath(path.dirname(htc_fn), 'htc') + jobname = path.splitext(path.basename(htc_fn))[0] + pbs_in_dir = path.join('pbs_in', basename) + if basename == '.': + raise FileNotFoundError('File structure is incorrect.') + + if not zipfile: + try: + zipfile = [x for x in os.listdir() if x.lower().endswith('.zip')][0] + except: + print('No .zip file found in current directory. Set model zip to \'model.zip\'') + zipfile = 'model.zip' + + # get the required parameters for the pbs file from the htc file + htc = HTCFile(htc_fn) #modelpath='../..') + p = { + 'walltime' : walltime, + 'modelzip' : zipfile, + 'jobname' : jobname, + 'htcdir' : 'htc/' + basename, + 'logdir' : path.dirname(htc.simulation.logfile.str_values())[2:] + '/', + 'resdir' : path.dirname(htc.output.filename.str_values())[2:] + '/', + 'turbdir' : path.dirname(htc.wind.mann.filename_u.str_values()) + '/', + 'turbfileroot' : path.basename(htc.wind.mann.filename_u.str_values()).split('u.')[0], + 'pbsoutdir' : 'pbs_out/' + basename + } + + + #Write pbs file based on template file and tags + if not os.path.exists(pbs_in_dir): + os.makedirs(pbs_in_dir) + + template = str(pbs_template) + + for key, value in p.items(): + template = template.replace('[' + key + ']', value) + + with open(os.path.join(pbs_in_dir, jobname + '.p'), 'w') as f: + f.write(template) diff --git a/wetb/utils/cluster_tools/pbsjob.py b/wetb/utils/cluster_tools/pbsjob.py index 0343b2d..e44385c 100644 --- a/wetb/utils/cluster_tools/pbsjob.py +++ b/wetb/utils/cluster_tools/pbsjob.py @@ -4,6 +4,9 @@ Created on 04/12/2015 @author: mmpe ''' import os +import io +from wetb.utils.cluster_tools.pbsfile import PBSFile +from wetb.utils.cluster_tools.os_path import relpath NOT_SUBMITTED = "Job not submitted" PENDING = "Pending" @@ -11,26 +14,35 @@ RUNNING = "Running" DONE = "Done" +def pjoin(*args): + return os.path.join(*args).replace('\\', '/') + + class SSHPBSJob(object): _status = NOT_SUBMITTED nodeid = None jobid = None - def __init__(self, sshClient): self.ssh = sshClient - - def submit(self, job, cwd, pbs_out_file): + def submit(self, pbsfile, cwd=None, pbs_out_file=None): self.cwd = cwd - self.pbs_out_file = os.path.relpath(cwd + pbs_out_file).replace("\\", "/") self.nodeid = None - #self.execute() - + if isinstance(pbsfile, PBSFile): + f = io.StringIO(str(pbsfile)) + f.seek(0) + pbs_filename = pjoin(cwd, pbsfile.filename) + self.ssh.upload(f, pbs_filename) + self.pbs_out_file = pjoin(cwd, pbsfile.stdout_filename) + cwd = pbsfile.workdir + pbsfile = pbsfile.filename + else: + self.pbs_out_file = os.path.relpath(cwd + pbs_out_file).replace("\\", "/") cmds = ['rm -f %s' % self.pbs_out_file] if cwd != "": cmds.append("cd %s" % cwd) - cmds.append("qsub %s" % job) + cmds.append("qsub %s" % pbsfile) _, out, _ = self.ssh.execute(";".join(cmds)) self.jobid = out.split(".")[0] self._status = PENDING @@ -65,7 +77,6 @@ class SSHPBSJob(object): return raise e - def is_executing(self): try: self.ssh.execute("qstat %s" % self.jobid) diff --git a/wetb/utils/cluster_tools/ssh_client.py b/wetb/utils/cluster_tools/ssh_client.py index 1227750..b729ee8 100644 --- a/wetb/utils/cluster_tools/ssh_client.py +++ b/wetb/utils/cluster_tools/ssh_client.py @@ -7,7 +7,7 @@ Created on 27/11/2015 from io import StringIO import sys import paramiko - + import os import threading from _collections import deque @@ -19,37 +19,35 @@ from sshtunnel import SSHTunnelForwarder, SSH_CONFIG_FILE from wetb.utils.ui import UI - - - class SSHInteractiveAuthTunnelForwarder(SSHTunnelForwarder): def __init__( - self, - interactive_auth_handler, - ssh_address_or_host=None, - ssh_config_file=SSH_CONFIG_FILE, - ssh_host_key=None, - ssh_password=None, - ssh_pkey=None, - ssh_private_key_password=None, - ssh_proxy=None, - ssh_proxy_enabled=True, - ssh_username=None, - local_bind_address=None, - local_bind_addresses=None, - logger=None, - mute_exceptions=False, - remote_bind_address=None, - remote_bind_addresses=None, - set_keepalive=0.0, - threaded=True, - compression=None, - allow_agent=True, * - args, ** - kwargs): + self, + interactive_auth_handler, + ssh_address_or_host=None, + ssh_config_file=SSH_CONFIG_FILE, + ssh_host_key=None, + ssh_password=None, + ssh_pkey=None, + ssh_private_key_password=None, + ssh_proxy=None, + ssh_proxy_enabled=True, + ssh_username=None, + local_bind_address=None, + local_bind_addresses=None, + logger=None, + mute_exceptions=False, + remote_bind_address=None, + remote_bind_addresses=None, + set_keepalive=0.0, + threaded=True, + compression=None, + allow_agent=True, * + args, ** + kwargs): self.interactive_auth_handler = interactive_auth_handler - SSHTunnelForwarder.__init__(self, ssh_address_or_host=ssh_address_or_host, ssh_config_file=ssh_config_file, ssh_host_key=ssh_host_key, ssh_password=ssh_password, ssh_pkey=ssh_pkey, ssh_private_key_password=ssh_private_key_password, ssh_proxy=ssh_proxy, ssh_proxy_enabled=ssh_proxy_enabled, ssh_username=ssh_username, local_bind_address=local_bind_address, local_bind_addresses=local_bind_addresses, logger=logger, mute_exceptions=mute_exceptions, remote_bind_address=remote_bind_address, remote_bind_addresses=remote_bind_addresses, set_keepalive=set_keepalive, threaded=threaded, compression=compression, allow_agent=allow_agent, *args, **kwargs) - + SSHTunnelForwarder.__init__(self, ssh_address_or_host=ssh_address_or_host, ssh_config_file=ssh_config_file, ssh_host_key=ssh_host_key, ssh_password=ssh_password, ssh_pkey=ssh_pkey, ssh_private_key_password=ssh_private_key_password, ssh_proxy=ssh_proxy, ssh_proxy_enabled=ssh_proxy_enabled, ssh_username=ssh_username, + local_bind_address=local_bind_address, local_bind_addresses=local_bind_addresses, logger=logger, mute_exceptions=mute_exceptions, remote_bind_address=remote_bind_address, remote_bind_addresses=remote_bind_addresses, set_keepalive=set_keepalive, threaded=threaded, compression=compression, allow_agent=allow_agent, *args, **kwargs) + def _connect_to_gateway(self): """ Open connection to SSH gateway @@ -66,9 +64,9 @@ class SSHInteractiveAuthTunnelForwarder(SSHTunnelForwarder): except paramiko.AuthenticationException: self.logger.debug('Authentication error') self._stop_transport() - + self.logger.error('Could not open connection to gateway') - + def _connect_to_gateway_old(self): """ Open connection to SSH gateway @@ -88,16 +86,16 @@ class SSHInteractiveAuthTunnelForwarder(SSHTunnelForwarder): self._transport.connect(hostkey=self.ssh_host_key, username=self.ssh_username, password=self.ssh_password) - + if self._transport.is_alive: return except paramiko.AuthenticationException: self.logger.debug('Authentication error') self._stop_transport() - - + self.logger.error('Could not open connection to gateway') + class SSHClient(object): "A wrapper of paramiko.SSHClient" TIMEOUT = 4 @@ -108,16 +106,16 @@ class SSHClient(object): self.password = password self.port = port self.key = key - self.gateway=gateway + self.gateway = gateway self.interactive_auth_handler = interactive_auth_handler self.ui = ui self.disconnect = 0 self.client = None self.ssh_lock = threading.RLock() - #self.sftp = None + self._sftp = None self.transport = None self.counter_lock = threading.RLock() - self.counter=0 + self.counter = 0 if key is not None: self.key = paramiko.RSAKey.from_private_key(StringIO(key), password=passphrase) @@ -147,50 +145,51 @@ class SSHClient(object): ssh_password=self.gateway.password, remote_bind_address=(self.host, self.port), local_bind_address=('0.0.0.0', 10022) - ) + ) else: self.tunnel = SSHTunnelForwarder((self.gateway.host, self.gateway.port), ssh_username=self.gateway.username, ssh_password=self.gateway.password, remote_bind_address=(self.host, self.port), local_bind_address=('0.0.0.0', 10022) - ) - - print ("start tunnel") + ) + + print("start tunnel") self.tunnel.start() - print ("self.client = paramiko.SSHClient()") + print("self.client = paramiko.SSHClient()") self.client = paramiko.SSHClient() - + self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - print ('self.client.connect("127.0.0.1", 10022, username=self.username, password=self.password)') + print('self.client.connect("127.0.0.1", 10022, username=self.username, password=self.password)') self.client.connect("127.0.0.1", 10022, username=self.username, password=self.password) - print ("done") + print("done") elif self.password is None or self.password == "": - raise IOError("Password not set for %s"%self.host) + raise IOError("Password not set for %s" % self.host) else: self.client = paramiko.SSHClient() self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: - self.client.connect(self.host, self.port, username=self.username, password=self.password, pkey=self.key, timeout=self.TIMEOUT) + self.client.connect(self.host, self.port, username=self.username, + password=self.password, pkey=self.key, timeout=self.TIMEOUT) except paramiko.ssh_exception.SSHException as e: transport = self.client.get_transport() transport.auth_interactive(self.username, self.interactive_auth_handler) - - - + assert self.client is not None #self.sftp = paramiko.SFTPClient.from_transport(self.client._transport) return self - def __del__(self): self.close() @property def sftp(self): - return paramiko.SFTPClient.from_transport(self.client._transport) - + if self._sftp is None: + self._sftp = paramiko.SFTPClient.from_transport(self.client._transport) + return self._sftp + + # @sftp.setter # def sftp(self, values): # pass @@ -200,17 +199,16 @@ class SSHClient(object): if self.disconnect == 0: self.close() - def download(self, remotefilepath, localfile, verbose=False, retry=1, callback=None): if verbose: ret = None - print ("Download %s > %s" % (remotefilepath, str(localfile))) + print("Download %s > %s" % (remotefilepath, str(localfile))) if callback is None: callback = self.ui.progress_callback() - + for i in range(retry): - if i>0: - print ("Retry download %s, #%d"%(remotefilepath, i)) + if i > 0: + print("Retry download %s, #%d" % (remotefilepath, i)) try: SSHClient.__enter__(self) @@ -223,75 +221,76 @@ class SSHClient(object): pass finally: SSHClient.__exit__(self) - - print ("Download %s failed from %s"%(remotefilepath, self.host)) + + print("Download %s failed from %s" % (remotefilepath, self.host)) if verbose: - print (ret) + print(ret) def upload(self, localfile, filepath, verbose=False, callback=None): if verbose: - print ("Upload %s > %s" % (localfile, filepath)) + print("Upload %s > %s" % (localfile, filepath)) if callback is None: callback = self.ui.progress_callback() try: SSHClient.__enter__(self) + self.execute("mkdir -p %s" % (os.path.dirname(filepath))) + sftp = self.sftp if isinstance(localfile, (str, bytes, int)): - ret = self.sftp.put(localfile, filepath, callback=callback) + ret = sftp.put(localfile, filepath, callback=callback) elif hasattr(localfile, 'read'): size = len(localfile.read()) localfile.seek(0) - ret = self.sftp.putfo(localfile, filepath, file_size=size, callback=callback) + ret = sftp.putfo(localfile, filepath, file_size=size, callback=callback) except Exception as e: - print ("upload failed ", str(e)) + print("upload failed ", str(e)) raise e finally: + sftp.close() SSHClient.__exit__(self) if verbose: - print (ret) - - + print(ret) + def upload_files(self, localpath, remotepath, file_lst=["."], compression_level=1, callback=None): assert os.path.isdir(localpath) if not isinstance(file_lst, (tuple, list)): file_lst = [file_lst] - files = ([os.path.join(root, f) for fp in file_lst for root,_,files in os.walk(os.path.join(localpath, fp )) for f in files] + - [f for fp in file_lst for f in glob.glob(os.path.join(localpath, fp)) ]) + files = ([os.path.join(root, f) for fp in file_lst for root, _, files in os.walk(os.path.join(localpath, fp)) for f in files] + + [f for fp in file_lst for f in glob.glob(os.path.join(localpath, fp))]) files = set([os.path.abspath(f) for f in files]) - compression_levels = {0:zipfile.ZIP_STORED, 1:zipfile.ZIP_DEFLATED, 2:zipfile.ZIP_BZIP2, 3:zipfile.ZIP_LZMA} + compression_levels = {0: zipfile.ZIP_STORED, 1: zipfile.ZIP_DEFLATED, 2: zipfile.ZIP_BZIP2, 3: zipfile.ZIP_LZMA} with self.counter_lock: - self.counter+=1 - zn = 'tmp_%s_%04d.zip'%(id(self),self.counter) + self.counter += 1 + zn = 'tmp_%s_%04d.zip' % (id(self), self.counter) zipf = zipfile.ZipFile(zn, 'w', compression_levels[compression_level]) try: for f in files: zipf.write(f, os.path.relpath(f, localpath)) zipf.close() - remote_zn = os.path.join(remotepath, zn).replace("\\","/") + remote_zn = os.path.join(remotepath, zn).replace("\\", "/") with self: - self.execute("mkdir -p %s"%(remotepath)) - + self.execute("mkdir -p %s" % (remotepath)) + self.upload(zn, remote_zn, callback=callback) - self.execute("unzip %s -d %s && rm %s"%(remote_zn, remotepath, remote_zn)) + self.execute("unzip %s -d %s && rm %s" % (remote_zn, remotepath, remote_zn)) except: - print ("upload files failed", ) + print("upload files failed", ) traceback.print_exc() raise finally: os.remove(zn) - - + def download_files(self, remote_path, localpath, file_lst=["."], compression_level=1, callback=None): if not isinstance(file_lst, (tuple, list)): file_lst = [file_lst] - file_lst = [f.replace("\\","/") for f in file_lst] + file_lst = [f.replace("\\", "/") for f in file_lst] with self.counter_lock: - self.counter+=1 - zn = 'tmp_%s_%04d.zip'%(id(self),self.counter) - - remote_zip = os.path.join(remote_path, zn).replace("\\","/") - self.execute("cd %s && zip -r %s %s"%(remote_path, zn, " ".join(file_lst))) - + self.counter += 1 + zn = 'tmp_%s_%04d.zip' % (id(self), self.counter) + + remote_zip = os.path.join(remote_path, zn).replace("\\", "/") + self.execute("cd %s && zip -r %s %s" % (remote_path, zn, " ".join(file_lst))) + local_zip = os.path.join(localpath, zn) if not os.path.isdir(localpath): os.makedirs(localpath) @@ -300,10 +299,9 @@ class SSHClient(object): with zipfile.ZipFile(local_zip, "r") as z: z.extractall(localpath) os.remove(local_zip) - def close(self): - for x in ["client", 'tunnel' ]: + for x in ["_sftp", "client", "tunnel"]: try: getattr(self, x).close() setattr(self, x, None) @@ -312,7 +310,8 @@ class SSHClient(object): self.disconnect = False def file_exists(self, filename): - _, out, _ = (self.execute('[ -f %s ] && echo "File exists" || echo "File does not exists"' % filename.replace("\\", "/"))) + _, out, _ = (self.execute( + '[ -f %s ] && echo "File exists" || echo "File does not exists"' % filename.replace("\\", "/"))) return out.strip() == "File exists" def execute(self, command, sudo=False, verbose=False): @@ -324,7 +323,7 @@ class SSHClient(object): command = "\n".join(command) if verbose: - print (">>> " + command) + print(">>> " + command) with self as ssh: if ssh is None: exc_info = sys.exc_info() @@ -337,9 +336,8 @@ class SSHClient(object): v, out, err = stdout.channel.recv_exit_status(), stdout.read().decode(), stderr.read().decode() - if v: - raise Warning ("out:\n%s\n----------\nerr:\n%s" % (out, err)) + raise Warning("out:\n%s\n----------\nerr:\n%s" % (out, err)) elif verbose: if out: sys.stdout.write(out) @@ -348,7 +346,8 @@ class SSHClient(object): return v, out, err def append_wine_path(self, path): - ret = self.execute('wine regedit /E tmp.reg "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment"') + ret = self.execute( + r'wine regedit /E tmp.reg "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment"') self.download('tmp.reg', 'tmp.reg') with open('tmp.reg') as fid: lines = fid.readlines() @@ -378,61 +377,51 @@ class SSHClient(object): return [file for file in out.strip().split("\n") if file != ""] - - class SharedSSHClient(SSHClient): def __init__(self, host, username, password=None, port=22, key=None, passphrase=None, interactive_auth_handler=None, gateway=None): - SSHClient.__init__(self, host, username, password=password, port=port, key=key, passphrase=passphrase, interactive_auth_handler=interactive_auth_handler, gateway=gateway) - + SSHClient.__init__(self, host, username, password=password, port=port, key=key, + passphrase=passphrase, interactive_auth_handler=interactive_auth_handler, gateway=gateway) + self.shared_ssh_queue = deque() self.next = None - - - - def execute(self, command, sudo=False, verbose=False): res = SSHClient.execute(self, command, sudo=sudo, verbose=verbose) return res - - - def __enter__(self): with self.ssh_lock: SSHClient.__enter__(self) #print ("request SSH", threading.currentThread()) # if len(self.shared_ssh_queue)>0 and self.shared_ssh_queue[0] == threading.get_ident(): -# # SSH already allocated to this thread ( multiple use-statements in "with ssh:" block +# # SSH already allocated to this thread ( multiple use-statements in "with ssh:" block # self.shared_ssh_queue.appendleft(threading.get_ident()) # else: # self.shared_ssh_queue.append(threading.get_ident()) - if len(self.shared_ssh_queue)>0 and self.shared_ssh_queue[0] == threading.get_ident(): - # SSH already allocated to this thread ( multiple use-statements in "with ssh:" block + if len(self.shared_ssh_queue) > 0 and self.shared_ssh_queue[0] == threading.get_ident(): + # SSH already allocated to this thread ( multiple use-statements in "with ssh:" block self.shared_ssh_queue.popleft() - + self.shared_ssh_queue.append(threading.get_ident()) - + while self.shared_ssh_queue[0] != threading.get_ident(): time.sleep(2) - + return self.client def __exit__(self, *args): with self.ssh_lock: - if len(self.shared_ssh_queue)>0 and self.shared_ssh_queue[0] == threading.get_ident(): + if len(self.shared_ssh_queue) > 0 and self.shared_ssh_queue[0] == threading.get_ident(): self.shared_ssh_queue.popleft() - if __name__ == "__main__": from mmpe.ui.qt_ui import QtInputUI q = QtInputUI(None) x = None - username, password = "mmpe", x.password #q.get_login("mmpe") - + username, password = "mmpe", x.password # q.get_login("mmpe") client = SSHClient(host='gorm', port=22, username=username, password=password) - print (client.glob("*.*", ".hawc2launcher/medium1__1__")) + print(client.glob("*.*", ".hawc2launcher/medium1__1__")) # ssh.upload('../News.txt', 'news.txt') diff --git a/wetb/utils/tests/test_pbs_file.py b/wetb/utils/tests/test_pbs_file.py new file mode 100644 index 0000000..8bd4df8 --- /dev/null +++ b/wetb/utils/tests/test_pbs_file.py @@ -0,0 +1,147 @@ +from wetb.utils.cluster_tools.pbsfile import PBSFile, Template, PBSMultiRunner +from wetb.utils.cluster_tools import ssh_client +from wetb.utils.cluster_tools.ssh_client import SSHClient +import io +from wetb.utils.cluster_tools.pbsjob import SSHPBSJob, DONE +import time +import pytest +try: + import x +except ImportError: + x = None + + +def test_template(): + t = Template('[a]B[c]') + assert t(a="A", c="C") == "ABC" + assert t(a="[c]", c="C") == "CBC", "%s!=%s" % (t(a="[c]", c="C"), 'CBC') + + +def test_pbs_file_str(): + pbsfile = PBSFile('/home/user/tmp', "test", '''python -c "print('hello world')"''', 'workq') + ref = """### Jobid +#PBS -N test +### Standard Output +#PBS -o /home/user/tmp/./stdout/test.out +### merge stderr into stdout +#PBS -j oe +#PBS -W umask=0003 +### Maximum wallclock time format HOURS:MINUTES:SECONDS +#PBS -l walltime=00:10:00 +#PBS -l nodes=1:ppn=1 +### Queue name +#PBS -q workq +cd /home/user/tmp +mkdir -p stdout +pwd +python -c "print('hello world')" +exit +""" + assert str(pbsfile) == ref + + +def test_pbs_file(): + if x is None: + pytest.xfail("Password missing") + pbsfile = PBSFile("/home/mmpe/tmp", "test", '''python -c "print('hello world')"''', 'workq') + ssh = SSHClient("jess.dtu.dk", 'mmpe', x.mmpe) + pbs_job = SSHPBSJob(ssh) + pbs_job.submit(pbsfile, "./tmp") + with pbs_job.ssh: + start = time.time() + while time.time() < start + 10: + time.sleep(.1) + if pbs_job.status == DONE: + break + else: + raise Exception("job not finished within 10 s") + _, out, _ = ssh.execute('cat ./tmp/stdout/test.out') + assert "hello world" in out + + +@pytest.mark.parametrize('i,s', [("01:02:03", "01:02:03"), + (5, "00:00:05"), + (4000, '01:06:40')]) +def test_pbs_walltime(i, s): + pbsfile = PBSFile("./tmp", "test", '', 'workq', walltime=i) + assert pbsfile.walltime == s + + +def test_pbs_multirunner(): + pbs = PBSMultiRunner("/home/user/tmp", ) + ref = r"""### Jobid +#PBS -N pbs_multirunner +### Standard Output +#PBS -o /home/user/tmp/./stdout/pbs_multirunner.out +### merge stderr into stdout +#PBS -j oe +#PBS -W umask=0003 +### Maximum wallclock time format HOURS:MINUTES:SECONDS +#PBS -l walltime=01:00:00 +#PBS -l nodes=1:ppn=1 +### Queue name +#PBS -q workq +cd /home/user/tmp +mkdir -p stdout +pwd +echo "import os +import glob +import numpy as np +from pathlib import Path +import re + +# find available nodes +with open(os.environ['PBS_NODEFILE']) as fid: + files = set([f.strip() for f in fid.readlines() if f.strip() != '']) +pbs_files = glob.glob('./**/*.in', recursive=True) + +# Make a list of [(pbs_in_filename, stdout_filename, walltime),...] +pat = re.compile(r'[\s\S]*#\s*PBS\s+-o\s+(.*)[\s\S]*(\d\d:\d\d:\d\d)[\s\S]*') + +def get_info(f): + try: + return (f,) + pat.match(Path(f).read_text()).groups() + except Exception: + return (f, f.replace('.in', '.out'), '00:30:00') +pbs_info_lst = map(get_info, pbs_files) + +# sort wrt walltime +pbs_info_lst = sorted(pbs_info_lst, key=lambda fow: tuple(map(int, fow[2].split(':'))))[::-1] +# make dict {node1: pbs_info_lst1, ...} and save +d = {f: pbs_info_lst[i::len(files)] for i, f in enumerate(files)} +with open('pbs.dict', 'w') as fid: + fid.write(str(d)) + +" | python + +for node in `cat $PBS_NODEFILE | sort | uniq` +do + + ssh -T $node << EOF & +cd /home/user/tmp +python -c "import os +from pathlib import Path +import multiprocessing +import platform +import time + +pbs_info_lst = eval(Path('pbs.dict').read_text())[platform.node()] +arg_lst = ['echo starting %s && mkdir -p %s && env PBS_JOBID=$PBS_JOBID %s &> %s && echo finished %s' % + (f, os.path.dirname(o), f, o, f) for f, o, _ in pbs_info_lst] +print(arg_lst[0]) +print('Starting %d jobs on %s' % (len(arg_lst), platform.node())) +pool = multiprocessing.Pool(os.environ['PBS_NUM_PPN']) +res = pool.map_async(os.system, arg_lst) +t = time.time() +for (f, _, _), r in zip(pbs_info_lst, res.get()): + print('%-50s\t%s' % (f, ('Errorcode %d' % r, 'Done')[r == 0])) +print('Done %d jobs on %s in %ds' % (len(arg_lst), platform.node(), time.time() - t)) + +" +EOF +done +wait + +exit +""" + assert str(pbs) == ref -- GitLab