@@ -25,7 +25,8 @@ turbines as actuator disks and actuator line models.
2525 **type: ** String, mandatory
2626
2727 This string identifies the type of actuator to use. The ones currently
28- supported are: ``UniformCtDisk ``, ``JoukowskyDisk ``, ``TurbineFastLine ``, ``TurbineFastDisk ``, and
28+ supported are: ``UniformCtDisk ``, ``JoukowskyDisk ``, ``TurbineFastLine ``,
29+ ``TurbineFastDisk ``, ``TurbineKynemaLine ``, and
2930 ``FixedWingLine ``.
3031
3132It is recommended to group common parameters across actuators using the ``Actuator.[type].[param] ``. For example::
@@ -395,6 +396,188 @@ Example for ``TurbineFastLine``::
395396
396397 This is the name of the openfast input file with all the turbine information.
397398
399+ TurbineKynemaLine
400+ """""""""""""""""
401+
402+ This actuator type requires an AMR-Wind build with Kynema coupling
403+ enabled. This is a similar coupling to OpenFAST, but Kynema
404+ acts as the turbine solver in this instance. Some turbine quantities
405+ that the OpenFAST interface needs from the AMR-Wind input file
406+ are instead found directly by the code within the Kynema input file,
407+ whereas other quantities that OpenFAST has stored within its inputs
408+ need to be directly supplied through the AMR-Wind input file for Kynema,
409+ especially for initialization.
410+
411+ Example for ``TurbineKynemaLine ``::
412+
413+ incflo.physics = FreeStream Actuator
414+ Actuator.labels = WTG01
415+ Actuator.type = TurbineKynemaLine
416+ ## Turbine discretization parameters
417+ Actuator.TurbineKynemaLine.num_struct_nodes_blade = 6
418+ Actuator.TurbineKynemaLine.num_points_blade = 64
419+ Actuator.TurbineKynemaLine.num_points_tower = 0 # not enabled yet
420+ ## Turbine setup
421+ Actuator.TurbineKynemaLine.rot_speed_rpm = 12.1
422+ Actuator.TurbineKynemaLine.yaw_deg = 30
423+ Actuator.WTG01.kynema_input_file = NREL-15MW-aero.yaml
424+ Actuator.WTG01.base_position = 5.0191 0. -89.56256
425+ ## Turbine - flow coupling parameters
426+ Actuator.TurbineKynemaLine.epsilon = 10.0 10.0 10.0
427+ Actuator.TurbineKynemaLine.epsilon_chord = 0.25 0.25 0.25
428+ Actuator.TurbineKynemaLine.fllc = 0
429+ Actuator.TurbineKynemaLine.nacelle_drag_coeff = 0.0
430+ Actuator.TurbineKynemaLine.nacelle_area = 0.0
431+ Actuator.TurbineKynemaLine.density = 1.225
432+ ## Turbine controller parameters and initial state
433+ Actuator.TurbineKynemaLine.controller_shared_library_path = /path/to/libdiscon.so # or libdiscon.dylib
434+ Actuator.TurbineKynemaLine.generator_power_init = 5e6
435+ Actuator.TurbineKynemaLine.hub_wind_vector_init = 9.8726896031426 5.7 0.0
436+ Actuator.TurbineKynemaLine.generator_efficiency = 0.944
437+ ## Turbine solver numerical parameters
438+ Actuator.TurbineKynemaLine.dt = 0.01
439+ Kynema.abs_err_tol = 1e-6
440+
441+ Actuator.TurbineKynemaLine.output_frequency = 10
442+
443+ ICNS.source_terms = ActuatorForcing
444+
445+ .. input_param :: Actuator.TurbineKynemaLine.num_struct_nodes_blade
446+
447+ **type: ** Int, required
448+
449+ This is the number of structural nodes for Kynema to use when modeling each turbine blade.
450+
451+ .. input_param :: Actuator.TurbineKynemaLine.num_points_blade
452+
453+ **type: ** Int, required
454+
455+ This is the number of aerodynamic sections for Kynema to use when modeling each turbine blade.
456+ This will correspond to the number of force points and velocity points on each blade in AMR-Wind.
457+ This must be the same number as provided in the Kynema input file.
458+
459+ .. input_param :: Actuator.TurbineKynemaLine.num_points_tower
460+
461+ **type: ** Int, required
462+
463+ This is the number of aerodynamic sections for Kynema to use when modeling the tower.
464+ This feature is still under development, so this argument must be set to 0.
465+
466+ .. input_param :: Actuator.TurbineKynemaLine.rot_speed_rpm
467+
468+ **type: ** Real, optional, default = 0
469+
470+ This is the initial rotational speed of the turbine in RPM. This parameter can
471+ alternatively be set in radians per second using the input parameter
472+ :input_param: `Actuator.TurbineKynemaLine.rot_speed_radps `.
473+
474+ .. input_param :: Actuator.TurbineKynemaLine.rot_speed_radps
475+
476+ **type: ** Real, optional, default = 0
477+
478+ This is the initial rotational speed of the turbine in radians per second.
479+ If this argument is present,
480+ :input_param: `Actuator.TurbineKynemaLine.rot_speed_rpm ` will be ignored.
481+
482+ .. input_param :: Actuator.TurbineKynemaLine.yaw_deg
483+
484+ **type: ** Real, optional, default = 0
485+
486+ This is the initial yaw angle of the turbine in degrees, counterclockwise
487+ from the -x direction. This parameter can alternatively be set in radians
488+ using the input parameter :input_param: `Actuator.TurbineKynemaLine.yaw_rad `.
489+
490+ .. input_param :: Actuator.TurbineKynemaLine.yaw_rad
491+
492+ **type: ** Real, optional, default = 0
493+
494+ This is the initial yaw angle of the turbine in radians. If this argument is
495+ present, :input_param: `Actuator.TurbineKynemaLine.yaw_deg ` will be ignored.
496+
497+ .. input_param :: Actuator.TurbineKynemaLine.kynema_input_file
498+
499+ **type: ** String, required
500+
501+ This is the input file used to initialize the Kynema turbine model. It
502+ conforms to the WindIO format. A pre-processing tool is provided in the
503+ Kynema repository to change the number of aerodynamic sections per blade,
504+ if needed, as well as to address some format edge cases.
505+
506+ .. input_param :: Actuator.TurbineKynemaLine.controller_shared_library_path
507+
508+ **type: ** String, optional, default = empty
509+
510+ This is the path to the controller shared library (typically ROSCO).
511+ If this parameter is not provided, no controller will be created in
512+ the turbine model, and the controller-related input parameters will not be used.
513+
514+ .. input_param :: Actuator.TurbineKynemaLine.generator_power_init
515+
516+ **type: ** Real, optional, default = 0
517+
518+ Power of the generator at the start of the simulation.
519+
520+ .. input_param :: Actuator.TurbineKynemaLine.hub_wind_vector_init
521+
522+ **type: ** Vector<Real>, optional, default = 0 0 0
523+
524+ This is the initial wind vector that the turbine hub is exposed to.
525+ It does not have to be the actual wind there at initialization; this
526+ number is converted to a wind speed that is used as the controller's
527+ initial guess.
528+
529+ .. input_param :: Actuator.TurbineKynemaLine.generator_efficiency
530+
531+ **type: ** Real, optional, default = 1
532+
533+ This is the efficiency of the generator. If not populated,
534+ the efficiency is assumed to be 1, i.e., 100%.
535+
536+ .. input_param :: Actuator.TurbineKynemaLine.dt
537+
538+ **type: ** Real, optional, default = same as AMR-Wind dt
539+
540+ This is the time step size chosen for the Kynema turbine model. It must
541+ be a factor of the AMR-Wind time step so that Kynema can take an integer
542+ number of sub-steps for each AMR-Wind time step. If not populated, the Kynema time
543+ step size will be the same as the flow solver time step, and, due to the
544+ robustness of Kynema, this is typically fine.
545+
546+ .. input_param :: Actuator.TurbineKynemaLine.output_frequency
547+
548+ **type: ** Int, optional, default = 10
549+
550+ This is how often, in time steps, to output actuator data from AMR-Wind.
551+ Note, this does not govern how often Kynema outputs turbine data. Kynema
552+ automatically outputs data every AMR-Wind time step.
553+
554+ .. input_param :: Kynema.abs_err_tol
555+
556+ **type: ** Real, optional, default = 1e-5
557+
558+ This turbine solver parameter is not turbine-specific; rather, it informs the
559+ solution parameters of Kynema overall. This, in particular, sets the absolute
560+ tolerance of the Kynema solver.
561+
562+ .. input_param :: Kynema.rel_err_tol
563+
564+ **type: ** Real, optional, default = 1e-4
565+
566+ This parameter sets the relative tolerance of the Kynema solver.
567+
568+ .. input_param :: Kynema.max_nonlinear_iterations
569+
570+ **type: ** Int, optional, default = 12
571+
572+ This parameter sets the maximum number of nonlinear iterations for the Kynema solver.
573+
574+ .. input_param :: Kynema.damping_factor
575+
576+ **type: ** Real, optional, default = 0
577+
578+ This parameter sets the numerical damping (time-based) of the Kynema solver.
579+ Counterintuitively, full damping corresponds to 0 and no damping corresponds to 1.
580+
398581Active Wake Control with Joukowsky Disk
399582"""""""""""""""""""""""""""""""""""""""
400583
0 commit comments