Ignore:
Timestamp:
Mar 20, 2020 11:35:48 AM (4 years ago)
Author:
maronga
Message:

added output of rotor and tower diameters and removed ASCII output in wind turbine model

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/wind_turbine_model_mod.f90

    r4460 r4465  
    2626! -----------------
    2727! $Id$
     28! Removed old ASCII outputm, some syntax layout adjustments, added output for
     29! rotor and tower diameters. Added warning message in case of NetCDF 3 (no
     30! WTM output file will be produced).
     31!
     32! 4460 2020-03-12 16:47:30Z oliver.maas
    2833! allow for simulating up to 10 000 wind turbines
    2934!
     
    258263    REAL(wp) ::  yaw_misalignment_min = 0.008726_wp    !< minimum yaw missalignment for which the actuator stops [rad]
    259264
    260 !
    261 !-- Set flag for output files TURBINE_PARAMETERS
    262     TYPE file_status
    263        LOGICAL ::  opened, opened_before
    264     END TYPE file_status
    265    
    266     TYPE(file_status), DIMENSION(500) :: openfile_turb_mod =                   &
    267                                          file_status(.FALSE.,.FALSE.)
    268265
    269266!
     
    542539!--    Set flag that indicates that the wind turbine model is switched on
    543540       wind_turbine = .TRUE.
    544        
     541
    545542       GOTO 12
    546543
     
    13911388!
    13921389!-- Create NetCDF output file
    1393     nc_filename = 'DATA_1D_TS_WTM_NETCDF' // TRIM( coupling_char )     
     1390#if defined( __netcdf4 )
     1391    nc_filename = 'DATA_1D_TS_WTM_NETCDF' // TRIM( coupling_char )
    13941392    return_value = dom_def_file( nc_filename, 'netcdf4-serial' )
    1395 
     1393#else
     1394    message_string = 'Wind turbine model output requires NetCDF version 4. ' //&
     1395                     'No output file will be created.'
     1396                   CALL message( 'wtm_init_output', 'PA0672',             &
     1397                                                                 0, 1, 0, 6, 0 )
     1398#endif
    13961399    IF ( myid == 0 )  THEN
    13971400!
     
    14081411       DEALLOCATE( ndim )
    14091412
    1410 !
    1411 !--    time
    14121413       return_value = dom_def_dim( nc_filename,                                &
    14131414                                   dimension_name = 'time',                    &
     
    14161417                                   values_realwp = (/0.0_wp/) )
    14171418 
    1418 !
    1419 !--    x
    14201419       variable_name = 'x'
    1421        return_value = dom_def_var( nc_filename,                        &
     1420       return_value = dom_def_var( nc_filename,                                &
    14221421                                   variable_name = variable_name,              &
    14231422                                   dimension_names = (/'turbine'/),            &
    14241423                                   output_type = 'real32' )
    1425 !
    1426 !--    y
     1424
    14271425       variable_name = 'y'
    1428        return_value = dom_def_var( nc_filename,                        &
     1426       return_value = dom_def_var( nc_filename,                                &
    14291427                                   variable_name = variable_name,              &
    14301428                                   dimension_names = (/'turbine'/),            &
     
    14321430
    14331431       variable_name = 'z'
    1434        return_value = dom_def_var( nc_filename,                        &
     1432       return_value = dom_def_var( nc_filename,                                &
    14351433                                   variable_name = variable_name,              &
    14361434                                   dimension_names = (/'turbine'/),            &
    14371435                                   output_type = 'real32' )
    1438                                    
    1439 
    1440        return_value = dom_def_att( nc_filename,                        &
     1436
     1437
     1438       variable_name = 'rotor_diameter'
     1439       return_value = dom_def_var( nc_filename,                                &
     1440                                   variable_name = variable_name,              &
     1441                                   dimension_names = (/'turbine'/),            &
     1442                                   output_type = 'real32' )
     1443
     1444       variable_name = 'tower_diameter'
     1445       return_value = dom_def_var( nc_filename,                                &
     1446                                   variable_name = variable_name,              &
     1447                                   dimension_names = (/'turbine'/),            &
     1448                                   output_type = 'real32' )
     1449
     1450       return_value = dom_def_att( nc_filename,                                &
    14411451                                   variable_name = 'time',                     &
    1442                                    attribute_name = 'units',                 &
     1452                                   attribute_name = 'units',                   &
    14431453                                   value = 'seconds since ' // origin_date_time )
    1444                                    
    1445        return_value = dom_def_att( nc_filename,                        &
     1454
     1455       return_value = dom_def_att( nc_filename,                                &
    14461456                                   variable_name = 'x',                        &
    1447                                    attribute_name = 'units',                 &
     1457                                   attribute_name = 'units',                   &
    14481458                                   value = 'm' )
    14491459
    1450        return_value = dom_def_att( nc_filename,                        &
     1460       return_value = dom_def_att( nc_filename,                                &
    14511461                                   variable_name = 'y',                        &
    1452                                    attribute_name = 'units',                 &
     1462                                   attribute_name = 'units',                   &
    14531463                                   value = 'm' )     
    14541464
    1455        return_value = dom_def_att( nc_filename,                        &
     1465       return_value = dom_def_att( nc_filename,                                &
    14561466                                   variable_name = 'z',                        &
    1457                                    attribute_name = 'units',                 &
    1458                                    value = 'm' )                                   
    1459 
    1460        return_value = dom_def_att( nc_filename,                        &
     1467                                   attribute_name = 'units',                   &
     1468                                   value = 'm' )
     1469
     1470       return_value = dom_def_att( nc_filename,                                &
     1471                                   variable_name = 'rotor_diameter',           &
     1472                                   attribute_name = 'units',                   &
     1473                                   value = 'm' )
     1474
     1475       return_value = dom_def_att( nc_filename,                                &
     1476                                   variable_name = 'tower_diameter',           &
     1477                                   attribute_name = 'units',                   &
     1478                                   value = 'm' )
     1479
     1480       return_value = dom_def_att( nc_filename,                                &
    14611481                                   variable_name = 'x',                        &
    1462                                    attribute_name = 'long_name',                 &
     1482                                   attribute_name = 'long_name',               &
    14631483                                   value = 'x location of rotor center' )
    14641484
    1465        return_value = dom_def_att( nc_filename,                        &
     1485       return_value = dom_def_att( nc_filename,                                &
    14661486                                   variable_name = 'y',                        &
    1467                                    attribute_name = 'long_name',                 &
     1487                                   attribute_name = 'long_name',               &
    14681488                                   value = 'y location of rotor center' )     
    14691489
    1470        return_value = dom_def_att( nc_filename,                        &
     1490       return_value = dom_def_att( nc_filename,                                &
    14711491                                   variable_name = 'z',                        &
    1472                                    attribute_name = 'long_name',                 &
     1492                                   attribute_name = 'long_name',               &
    14731493                                   value = 'z location of rotor center' )     
    1474                                    
    1475                                    
    1476        return_value = dom_def_att( nc_filename,                        &
     1494
     1495       return_value = dom_def_att( nc_filename,                                &
    14771496                                   variable_name = 'turbine_name',             &
    1478                                    attribute_name = 'long_name',                 &
    1479                                    value = 'turbine name')   
    1480  
    1481        return_value = dom_def_att( nc_filename,                        &
     1497                                   attribute_name = 'long_name',               &
     1498                                   value = 'turbine name')
     1499
     1500       return_value = dom_def_att( nc_filename,                                &
     1501                                   variable_name = 'rotor_diameter',           &
     1502                                   attribute_name = 'long_name',               &
     1503                                   value = 'rotor diameter')
     1504
     1505       return_value = dom_def_att( nc_filename,                                &
     1506                                   variable_name = 'tower_diameter',           &
     1507                                   attribute_name = 'long_name',               &
     1508                                   value = 'tower diameter')
     1509
     1510       return_value = dom_def_att( nc_filename,                               &
    14821511                                   variable_name = 'time',                     &
    1483                                    attribute_name = 'standard_name',             &
     1512                                   attribute_name = 'standard_name',           &
    14841513                                   value = 'time')
    14851514
    1486        return_value = dom_def_att( nc_filename,                        &
     1515       return_value = dom_def_att( nc_filename,                                &
    14871516                                   variable_name = 'time',                     &
    14881517                                   attribute_name = 'axis',                    &
    14891518                                   value = 'T')
    14901519
    1491        return_value = dom_def_att( nc_filename,                        &
     1520       return_value = dom_def_att( nc_filename,                                &
    14921521                                   variable_name = 'x',                        &
    14931522                                   attribute_name = 'axis',                    &
    14941523                                   value = 'X' )
    14951524
    1496        return_value = dom_def_att( nc_filename,                        &
     1525       return_value = dom_def_att( nc_filename,                                &
    14971526                                   variable_name = 'y',                        &
    14981527                                   attribute_name = 'axis',                    &
    1499                                    value = 'Y' )                                 
    1500 
    1501 
    1502        variable_name = 'rotor_speed'
    1503        return_value = dom_def_var( nc_filename,                        &
    1504                                    variable_name = variable_name,      &
    1505                                    dimension_names = (/ 'turbine', 'time   ' /),     &
     1528                                   value = 'Y' )
     1529
     1530                                   
     1531       variable_name = 'generator_power'
     1532       return_value = dom_def_var( nc_filename,                                  &
     1533                                   variable_name = variable_name,                &
     1534                                   dimension_names = (/ 'turbine', 'time   ' /), &
     1535                                   output_type = 'real32' )
     1536
     1537       return_value = dom_def_att( nc_filename,                                &
     1538                                   variable_name = variable_name,              &
     1539                                   attribute_name = 'units',                   &
     1540                                   value = 'W' ) 
     1541
     1542       variable_name = 'generator_speed'
     1543       return_value = dom_def_var( nc_filename,                                  &
     1544                                   variable_name = variable_name,                &
     1545                                   dimension_names = (/ 'turbine', 'time   ' /), &
     1546                                   output_type = 'real32' )
     1547
     1548       return_value = dom_def_att( nc_filename,                                &
     1549                                   variable_name = variable_name,              &
     1550                                   attribute_name = 'units',                   &
     1551                                   value = 'rad/s' )
     1552
     1553       variable_name = 'generator_torque'
     1554       return_value = dom_def_var( nc_filename,                                  &
     1555                                   variable_name = variable_name,                &
     1556                                   dimension_names = (/ 'turbine', 'time   ' /), &
    15061557                                   output_type = 'real32' )
    15071558 
    1508        return_value = dom_def_att( nc_filename,                  &
    1509                                    variable_name = variable_name,        &
    1510                                    attribute_name = 'units',           &
    1511                                    value = 'rad/s' )
    1512  
    1513        variable_name = 'generator_speed'
    1514        return_value = dom_def_var( nc_filename,                        &
    1515                                    variable_name = variable_name,      &
    1516                                    dimension_names = (/ 'turbine', 'time   ' /),     &
     1559       return_value = dom_def_att( nc_filename,                                &
     1560                                   variable_name = variable_name,              &
     1561                                   attribute_name = 'units',                   &
     1562                                   value = 'Nm' )
     1563
     1564       variable_name = 'pitch_angle'
     1565       return_value = dom_def_var( nc_filename,                                  &
     1566                                   variable_name = variable_name,                &
     1567                                   dimension_names = (/ 'turbine', 'time   ' /), &
     1568                                   output_type = 'real32' )
     1569
     1570       return_value = dom_def_att( nc_filename,                                &
     1571                                   variable_name = variable_name,              &
     1572                                   attribute_name = 'units',                   &
     1573                                   value = 'degrees' )
     1574
     1575       variable_name = 'rotor_power'
     1576       return_value = dom_def_var( nc_filename,                                  &
     1577                                   variable_name = variable_name,                &
     1578                                   dimension_names = (/ 'turbine', 'time   ' /), &
    15171579                                   output_type = 'real32' )
    15181580 
    1519        return_value = dom_def_att( nc_filename,                  &
    1520                                    variable_name = variable_name,        &
    1521                                    attribute_name = 'units',           &
    1522                                    value = 'rad/s' )
    1523      
    1524      
    1525        variable_name = 'generator_torque'
    1526        return_value = dom_def_var( nc_filename,                        &
    1527                                    variable_name = variable_name,      &
    1528                                    dimension_names = (/ 'turbine', 'time   ' /),     &
     1581       return_value = dom_def_att( nc_filename,                                &
     1582                                   variable_name = variable_name,              &
     1583                                   attribute_name = 'units',                   &
     1584                                   value = 'W' ) 
     1585
     1586       variable_name = 'rotor_speed'
     1587       return_value = dom_def_var( nc_filename,                                  &
     1588                                   variable_name = variable_name,                &
     1589                                   dimension_names = (/ 'turbine', 'time   ' /), &
    15291590                                   output_type = 'real32' )
    15301591 
    1531        return_value = dom_def_att( nc_filename,                  &
    1532                                    variable_name = variable_name,        &
    1533                                    attribute_name = 'units',           &
    1534                                    value = 'Nm' ) 
    1535        
    1536        variable_name = 'rotor_torque'
    1537        return_value = dom_def_var( nc_filename,                        &
    1538                                    variable_name = variable_name,      &
    1539                                    dimension_names = (/ 'turbine', 'time   ' /),     &
     1592       return_value = dom_def_att( nc_filename,                                &
     1593                                   variable_name = variable_name,              &
     1594                                   attribute_name = 'units',                   &
     1595                                   value = 'rad/s' )
     1596
     1597       variable_name = 'rotor_thrust'
     1598       return_value = dom_def_var( nc_filename,                                  &
     1599                                   variable_name = variable_name,                &
     1600                                   dimension_names = (/ 'turbine', 'time   ' /), &
    15401601                                   output_type = 'real32' )
    15411602 
    1542        return_value = dom_def_att( nc_filename,                  &
    1543                                    variable_name = variable_name,        &
    1544                                    attribute_name = 'units',           &
    1545                                    value = 'Nm' )
    1546 
    1547        variable_name = 'pitch_angle'
    1548        return_value = dom_def_var( nc_filename,                        &
    1549                                    variable_name = variable_name,      &
    1550                                    dimension_names = (/ 'turbine', 'time   ' /),     &
     1603       return_value = dom_def_att( nc_filename,                                &
     1604                                   variable_name = variable_name,              &
     1605                                   attribute_name = 'units',                   &
     1606                                   value = 'N' )   
     1607
     1608       variable_name = 'rotor_torque'
     1609       return_value = dom_def_var( nc_filename,                                  &
     1610                                   variable_name = variable_name,                &
     1611                                   dimension_names = (/ 'turbine', 'time   ' /), &
    15511612                                   output_type = 'real32' )
    15521613 
    1553        return_value = dom_def_att( nc_filename,                  &
    1554                                    variable_name = variable_name,        &
    1555                                    attribute_name = 'units',           &
    1556                                    value = 'degrees' )     
    1557                                    
    1558        variable_name = 'generator_power'
    1559        return_value = dom_def_var( nc_filename,                        &
    1560                                    variable_name = variable_name,      &
    1561                                    dimension_names = (/ 'turbine', 'time   ' /),     &
     1614       return_value = dom_def_att( nc_filename,                                &
     1615                                   variable_name = variable_name,              &
     1616                                   attribute_name = 'units',                   &
     1617                                   value = 'Nm' )
     1618
     1619       variable_name = 'wind_direction'
     1620       return_value = dom_def_var( nc_filename,                                  &
     1621                                   variable_name = variable_name,                &
     1622                                   dimension_names = (/ 'turbine', 'time   ' /), &
    15621623                                   output_type = 'real32' )
    15631624 
    1564        return_value = dom_def_att( nc_filename,                  &
    1565                                    variable_name = variable_name,        &
    1566                                    attribute_name = 'units',           &
    1567                                    value = 'W' ) 
    1568                                    
    1569        variable_name = 'rotor_power'
    1570        return_value = dom_def_var( nc_filename,                        &
    1571                                    variable_name = variable_name,      &
    1572                                    dimension_names = (/ 'turbine', 'time   ' /),     &
     1625       return_value = dom_def_att( nc_filename,                                &
     1626                                   variable_name = variable_name,              &
     1627                                   attribute_name = 'units',                   &
     1628                                   value = 'degrees' ) 
     1629
     1630       variable_name = 'yaw_angle'
     1631       return_value = dom_def_var( nc_filename,                                  &
     1632                                   variable_name = variable_name,                &
     1633                                   dimension_names = (/ 'turbine', 'time   ' /), &
    15731634                                   output_type = 'real32' )
    15741635 
    1575        return_value = dom_def_att( nc_filename,                  &
    1576                                    variable_name = variable_name,        &
    1577                                    attribute_name = 'units',           &
    1578                                    value = 'W' ) 
    1579                                    
    1580         variable_name = 'rotor_thrust'
    1581        return_value = dom_def_var( nc_filename,                        &
    1582                                    variable_name = variable_name,      &
    1583                                    dimension_names = (/ 'turbine', 'time   ' /),     &
    1584                                    output_type = 'real32' )
    1585  
    1586        return_value = dom_def_att( nc_filename,                  &
    1587                                    variable_name = variable_name,        &
    1588                                    attribute_name = 'units',           &
    1589                                    value = 'N' )   
    1590                                    
    1591                                    
    1592        variable_name = 'wind_direction'
    1593        return_value = dom_def_var( nc_filename,                        &
    1594                                    variable_name = variable_name,      &
    1595                                    dimension_names = (/ 'turbine', 'time   ' /),     &
    1596                                    output_type = 'real32' )
    1597  
    1598        return_value = dom_def_att( nc_filename,                  &
    1599                                    variable_name = variable_name,        &
    1600                                    attribute_name = 'units',           &
     1636       return_value = dom_def_att( nc_filename,                                &
     1637                                   variable_name = variable_name,              &
     1638                                   attribute_name = 'units',                   &
    16011639                                   value = 'degrees' ) 
    1602                                    
    1603        variable_name = 'yaw_angle'
    1604        return_value = dom_def_var( nc_filename,                        &
    1605                                    variable_name = variable_name,      &
    1606                                    dimension_names = (/ 'turbine', 'time   ' /),     &
    1607                                    output_type = 'real32' )
    1608  
    1609        return_value = dom_def_att( nc_filename,                  &
    1610                                    variable_name = variable_name,        &
    1611                                    attribute_name = 'units',           &
    1612                                    value = 'degrees' ) 
    1613 
    1614    ENDIF   
     1640
     1641   ENDIF
    16151642END SUBROUTINE
    16161643   
     
    18971924!--    the rotor. If tilt = 0, rot_coord_trans is a unit matrix.
    18981925
    1899        rot_coord_trans(inot,1,1) = rot_eigen_rad(1)**2                   *     &
     1926       rot_coord_trans(inot,1,1) = rot_eigen_rad(1)**2                   *           &
    19001927                                   ( 1.0_wp - COS( tilt_angle ) ) + COS( tilt_angle )
    1901        rot_coord_trans(inot,1,2) = rot_eigen_rad(1) * rot_eigen_rad(2)   *     &
     1928       rot_coord_trans(inot,1,2) = rot_eigen_rad(1) * rot_eigen_rad(2)   *           &
    19021929                                   ( 1.0_wp - COS( tilt_angle ) )              -     &
    19031930                                   rot_eigen_rad(3) * SIN( tilt_angle )
    1904        rot_coord_trans(inot,1,3) = rot_eigen_rad(1) * rot_eigen_rad(3)   *     &
     1931       rot_coord_trans(inot,1,3) = rot_eigen_rad(1) * rot_eigen_rad(3)   *           &
    19051932                                   ( 1.0_wp - COS( tilt_angle ) )              +     &
    19061933                                   rot_eigen_rad(2) * SIN( tilt_angle )
    1907        rot_coord_trans(inot,2,1) = rot_eigen_rad(2) * rot_eigen_rad(1)   *     &
     1934       rot_coord_trans(inot,2,1) = rot_eigen_rad(2) * rot_eigen_rad(1)   *           &
    19081935                                   ( 1.0_wp - COS( tilt_angle ) )              +     &
    19091936                                   rot_eigen_rad(3) * SIN( tilt_angle )
    1910        rot_coord_trans(inot,2,2) = rot_eigen_rad(2)**2                   *     &
     1937       rot_coord_trans(inot,2,2) = rot_eigen_rad(2)**2                   *           &
    19111938                                   ( 1.0_wp - COS( tilt_angle ) ) + COS( tilt_angle )
    1912        rot_coord_trans(inot,2,3) = rot_eigen_rad(2) * rot_eigen_rad(3)   *     &
     1939       rot_coord_trans(inot,2,3) = rot_eigen_rad(2) * rot_eigen_rad(3)   *           &
    19131940                                   ( 1.0_wp - COS( tilt_angle ) )              -     &
    19141941                                   rot_eigen_rad(1) * SIN( tilt_angle )
    1915        rot_coord_trans(inot,3,1) = rot_eigen_rad(3) * rot_eigen_rad(1)   *     &
     1942       rot_coord_trans(inot,3,1) = rot_eigen_rad(3) * rot_eigen_rad(1)   *           &
    19161943                                   ( 1.0_wp - COS( tilt_angle ) )              -     &
    19171944                                   rot_eigen_rad(2) * SIN( tilt_angle )
    1918        rot_coord_trans(inot,3,2) = rot_eigen_rad(3) * rot_eigen_rad(2)   *     &
     1945       rot_coord_trans(inot,3,2) = rot_eigen_rad(3) * rot_eigen_rad(2)   *           &
    19191946                                   ( 1.0_wp - COS( tilt_angle ) )              +     &
    19201947                                   rot_eigen_rad(1) * SIN( tilt_angle )
    1921        rot_coord_trans(inot,3,3) = rot_eigen_rad(3)**2                   *     &
     1948       rot_coord_trans(inot,3,3) = rot_eigen_rad(3)**2                   *           &
    19221949                                   ( 1.0_wp - COS( tilt_angle ) ) + COS( tilt_angle )
    19231950
     
    24092436
    24102437                   IF ( tip_loss_correction )  THEN
    2411                    
     2438!
    24122439!--                  Tip loss correction following Schito
    24132440!--                  Schito applies the tip loss correction only to the lift force
    24142441!--                  Therefore, the tip loss correction is only applied to the lift
    24152442!--                  coefficient and not to the drag coefficient in our case
    2416 !--                 
     2443!--
    24172444                     IF ( phi_rel(rseg) == 0.0_wp ) THEN
    24182445                        tl_factor = 1.0_wp
    24192446                     ELSE
    2420                         tl_factor = ( 2.0 / pi ) *                                &
    2421                              ACOS( EXP( -1.0 * ( 3.0 * ( rotor_radius(inot) - cur_r ) /     &
     2447                        tl_factor = ( 2.0 / pi ) *                                      &
     2448                             ACOS( EXP( -1.0 * ( 3.0 * ( rotor_radius(inot) - cur_r ) / &
    24222449                             ( 2.0 * cur_r * abs( sin( phi_rel(rseg) ) ) ) ) ) )
    24232450                     ENDIF
    2424                      
    2425                      turb_cl(rseg)  = tl_factor * turb_cl(rseg)                                 
    2426                                  
    2427                    ENDIF               
     2451
     2452                     turb_cl(rseg)  = tl_factor * turb_cl(rseg)
     2453
     2454                   ENDIF
    24282455!
    24292456!--                !-----------------------------------------------------!
     
    24642491                   !$OMP CRITICAL
    24652492                   thrust_rotor(inot) = thrust_rotor(inot) +                   &
    2466                                         thrust_seg(rseg)                   
    2467                    
     2493                                        thrust_seg(rseg)
     2494
    24682495
    24692496                   torque_total(inot) = torque_total(inot) + (torque_seg * cur_r)
     
    24862513             CALL cpu_log( log_point_s(62), 'wtm_controller', 'start' )
    24872514
    2488              
     2515
    24892516             IF ( speed_control )  THEN
    24902517!
    24912518!--             Calculation of the current generator speed for rotor speed control
    2492              
    2493 !                                    
     2519
     2520!
    24942521!--             The acceleration of the rotor speed is calculated from
    24952522!--             the force balance of the accelerating torque
     
    25042531!--             and rotor speed
    25052532                generator_speed(inot) = gear_ratio * ( rotor_speed(inot) + om_rate )     
    2506              
     2533
    25072534             ENDIF
    2508              
     2535
    25092536             IF ( pitch_control )  THEN
    25102537
     
    25232550                   CYCLE pit_loop
    25242551                ENDIF
    2525                
     2552
    25262553!
    25272554!--             The current pitch is saved for the next time step
     
    25352562!
    25362563!--          Call the rotor speed controller
    2537              
     2564
    25382565             IF ( speed_control )  THEN
    25392566!
     
    25462573                   ENDIF
    25472574                ENDIF
    2548                                
     2575
    25492576             ENDIF
    25502577
     
    25922619!--                         Predetermine flag to mask topography
    25932620                            flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 1 ) )
    2594      
     2621
    25952622!
    25962623!--                         Determine the square of the distance between the
     
    26362663                         ENDDO  ! End of loop over rseg
    26372664                      ENDDO     ! End of loop over ring
    2638              
     2665
    26392666!
    26402667!--                   Rotation of force components:
     
    26442671                                      torque_z(k,j,i)*rotz(inot,1)             &
    26452672                                                              ) * flag
    2646                                
     2673
    26472674                      rot_tend_y(k,j,i) = rot_tend_y(k,j,i) + (                &
    26482675                                      thrust(k,j,i)*rotx(inot,2) +             &
     
    26502677                                      torque_z(k,j,i)*rotz(inot,2)             &
    26512678                                                              ) * flag
    2652                                
     2679
    26532680                      rot_tend_z(k,j,i) = rot_tend_z(k,j,i) + (                &
    26542681                                      thrust(k,j,i)*rotx(inot,3) +             &
     
    26632690
    26642691             CALL cpu_log( log_point_s(63), 'wtm_smearing', 'stop' )         
    2665                    
     2692
    26662693          ENDDO                  !-- end of loop over turbines
    26672694
    2668                
     2695
    26692696          IF ( yaw_control )  THEN
    26702697!
     
    26762703                wd30 = 999.0_wp                  ! Set to dummy value
    26772704                ALLOCATE( wd30_l(1:WDLON) )
    2678                
     2705
    26792706                WDSHO = MAX( 1 , NINT( 2.0_wp / dt_3d ) )   ! 2s running mean array
    26802707                ALLOCATE( wd2(1:n_turbines,1:WDSHO) )
     
    26822709                ALLOCATE( wd2_l(1:WDSHO) )
    26832710                start_up = .FALSE.
    2684              ENDIF         
     2711             ENDIF
    26852712
    26862713!
     
    27072734
    27082735                      yaw_angle_l(inot) = yaw_angle(inot)
    2709                      
     2736
    27102737                   ENDIF
    27112738                ENDIF
    2712                    
     2739
    27132740             ENDDO                                 !-- end of loop over turbines
    27142741
     
    27262753             wdir     = wdir_l
    27272754             yaw_angle  = yaw_angle_l
    2728              
    2729              
     2755
    27302756#endif
    27312757             DO inot = 1, n_turbines
    2732 !             
    2733 !--             Update rotor orientation               
     2758!
     2759!--             Update rotor orientation
    27342760                CALL wtm_rotate_rotor( inot )
    27352761
    27362762             ENDDO ! End of loop over turbines
    2737                            
     2763
    27382764          ENDIF  ! end of yaw control
    2739          
     2765
    27402766          IF ( speed_control )  THEN
    27412767!
     
    27552781             generator_speed_f_old = generator_speed_f
    27562782#endif
    2757            
     2783
    27582784          ENDIF
    27592785
    2760          
    2761          
    2762          
    2763           DO inot = 1, n_turbines
    2764 
    2765 
    2766          
    2767              IF ( myid == 0 ) THEN
    2768                 IF ( openfile_turb_mod(400+inot)%opened )  THEN
    2769                    WRITE ( 400+inot, 106 ) time_since_reference_point, rotor_speed(inot),          &
    2770                              generator_speed(inot), torque_gen_old(inot),                          &
    2771                              torque_total(inot), pitch_angle(inot),                                &
    2772                              torque_gen_old(inot)*generator_speed(inot)*generator_efficiency,      &
    2773                              torque_total(inot)*rotor_speed(inot)*air_density,                     &
    2774                              thrust_rotor(inot),                                                   &
    2775                              wdir(inot)*180.0_wp/pi,                                               &
    2776                              (yaw_angle(inot))*180.0_wp/pi                   
    2777                              
    2778                 ELSE
    2779 
    2780                    WRITE ( turbine_id,'(A2,I2.2)')  '_T', inot
    2781                    OPEN ( 400+inot, FILE=( 'WTM_OUTPUT_DATA' //                &
    2782                                            TRIM( coupling_char ) //            &
    2783                                            turbine_id ), FORM='FORMATTED' )
    2784                    WRITE ( 400+inot, 105 ) inot
    2785                    WRITE ( 400+inot, 106 ) time_since_reference_point, rotor_speed(inot),          &
    2786                              generator_speed(inot), torque_gen_old(inot),                          &
    2787                              torque_total(inot), pitch_angle(inot),                                &
    2788                              torque_gen_old(inot)*generator_speed(inot)*generator_efficiency,      &
    2789                              torque_total(inot)*rotor_speed(inot)*air_density,                     &
    2790                              thrust_rotor(inot),                                                   &
    2791                              wdir(inot)*180.0_wp/pi,                                               &
    2792                              (yaw_angle(inot))*180.0_wp/pi
    2793                 ENDIF
    2794              ENDIF
    2795 
    2796 !--          Set open flag
    2797              openfile_turb_mod(400+inot)%opened = .TRUE.
    2798           ENDDO                                    !-- end of loop over turbines
    2799 
    2800          
    2801          
    2802        ENDIF   
    2803 
    2804        
     2786       ENDIF
     2787
    28052788       CALL cpu_log( log_point_s(61), 'wtm_forces', 'stop' )
    2806        
    2807 !
    2808 !--    Formats
    2809        105 FORMAT ('Turbine control data for turbine ',I2,1X,':'/ &
    2810               &'----------------------------------------'/ &
    2811               &'     Time   RSpeed   GSpeed     GenTorque     AeroTorque  ',   &
    2812                'Pitch    Power(Gen)    Power(Rot)    RotThrust WDirection  ',  &
    2813                'YawOrient')
    2814 
    2815        106 FORMAT (F9.2,2X,F7.3,2X,F7.2,2X,F12.1,3X,F12.1,1X,F6.2,2X,F12.1,2X, &
    2816                    F12.1,1X,F12.1,4X,F7.2,4X,F7.2)
    2817 
    2818            
    2819                    
     2789
     2790
    28202791    END SUBROUTINE wtm_forces
    28212792
    2822    
     2793
    28232794!------------------------------------------------------------------------------!
    28242795! Description:
     
    28272798!------------------------------------------------------------------------------!
    28282799    SUBROUTINE wtm_yawcontrol( inot )
    2829    
     2800
    28302801       USE kinds
    2831                
     2802
    28322803       IMPLICIT NONE
    2833      
     2804
    28342805       INTEGER(iwp)             :: inot
    28352806       INTEGER(iwp)             :: i_wd_30
     
    28762847             ENDIF
    28772848          ENDIF
    2878          
     2849
    28792850          wd30(inot,:) = wd30_l
    28802851
    2881 !     
     2852!
    28822853!--    If turbine is already yawing:
    28832854!--    Initialize 2 s running mean and yaw until the missalignment is smaller
     
    28902861          wd2_l = CSHIFT( wd2_l, SHIFT = -1 )
    28912862          wd2_l(1) = wdir(inot)
    2892 !     
     2863!
    28932864!--       Check if array is full ( no more dummies )
    28942865          IF ( .NOT. ANY( wd2_l == 999.0_wp ) ) THEN
     
    29152886             yaw_angle(inot) = yaw_angle(inot) + yawdir(inot) * yaw_speed * dt_3d
    29162887          ENDIF
    2917      
     2888
    29182889          wd2(inot,:) = wd2_l
    2919            
     2890
    29202891       ENDIF
    2921      
     2892
    29222893    END SUBROUTINE wtm_yawcontrol
    29232894
     
    29762947
    29772948       INTEGER(iwp)             :: inot
    2978        
    2979          
     2949
    29802950
    29812951!
     
    29922962
    29932963       IF ( generator_speed_f(inot) <= region_15_min )  THEN
    2994 !                       
     2964!
    29952965!--       Region 1: Generator torque is set to zero to accelerate the rotor:
    29962966          torque_gen(inot) = 0
    2997        
     2967
    29982968       ELSEIF ( generator_speed_f(inot) <= region_2_min )  THEN
    2999 !                       
     2969!
    30002970!--       Region 1.5: Generator torque is increasing linearly with rotor speed:
    30012971          torque_gen(inot) = slope15 * ( generator_speed_f(inot) - region_15_min )
    3002                          
     2972
    30032973       ELSEIF ( generator_speed_f(inot) <= region_25_min )  THEN
    30042974!
     
    30062976!--                 speed to keep the TSR optimal:
    30072977          torque_gen(inot) = region_2_slope * generator_speed_f(inot) * generator_speed_f(inot)
    3008        
     2978
    30092979       ELSEIF ( generator_speed_f(inot) < generator_speed_rated )  THEN
    3010 !                       
     2980!
    30112981!--       Region 2.5: Slipage region between 2 and 3:
    30122982          torque_gen(inot) = region_25_slope * ( generator_speed_f(inot) - vs_sysp )
    3013        
     2983
    30142984       ELSE
    3015 !                       
     2985!
    30162986!--       Region 3: Generator torque is antiproportional to the rotor speed to
    30172987!--                 keep the power constant:
    30182988          torque_gen(inot) = generator_power_rated / generator_speed_f(inot)
    3019        
     2989
    30202990       ENDIF
    3021 !                       
     2991!
    30222992!--    Calculate torque rate and confine with a max
    30232993       trq_rate = ( torque_gen(inot) - torque_gen_old(inot) ) / dt_3d
    30242994       trq_rate = MIN( MAX( trq_rate, -1.0_wp * generator_torque_rate_max ), &
    30252995                  generator_torque_rate_max )
    3026 !                       
    3027 !--    Calculate new gen torque and confine with max torque                         
     2996!
     2997!--    Calculate new gen torque and confine with max torque
    30282998       torque_gen(inot) = torque_gen_old(inot) + trq_rate * dt_3d
    3029        torque_gen(inot) = MIN( torque_gen(inot), generator_torque_max )                                             
    3030 !
    3031 !--    Overwrite values for next timestep                       
     2999       torque_gen(inot) = MIN( torque_gen(inot), generator_torque_max )
     3000!
     3001!--    Overwrite values for next timestep
    30323002       rotor_speed_l(inot) = generator_speed(inot) / gear_ratio
    30333003
    3034    
     3004
    30353005    END SUBROUTINE wtm_speed_control   
    30363006
     
    30903060                   DO  k = nzb+1, MAXVAL(k_hub) + MAXVAL(k_smear)
    30913061                      tend_nac_y = 0.5_wp * nac_cd_surf(k,j,i) *               &
    3092                                          SIGN( v(k,j,i)**2 , v(k,j,i) )     
     3062                                         SIGN( v(k,j,i)**2 , v(k,j,i) )
    30933063                      tend_tow_y   = 0.5_wp * tow_cd_surf(k,j,i) *             &
    3094                                          SIGN( v(k,j,i)**2 , v(k,j,i) )                     
     3064                                         SIGN( v(k,j,i)**2 , v(k,j,i) )
    30953065                      tend(k,j,i) = tend(k,j,i) + ( - rot_tend_y(k,j,i)        &
    30963066                                  - tend_nac_y - tend_tow_y )                  &
     
    31563126!--             Calculate the thrust generated by the nacelle and the tower
    31573127                tend_nac_x = 0.5_wp * nac_cd_surf(k,j,i) *                     &
    3158                                    SIGN( u(k,j,i)**2 , u(k,j,i) )     
     3128                                   SIGN( u(k,j,i)**2 , u(k,j,i) )
    31593129                tend_tow_x   = 0.5_wp * tow_cd_surf(k,j,i) *                   &
    3160                                    SIGN( u(k,j,i)**2 , u(k,j,i) ) 
     3130                                   SIGN( u(k,j,i)**2 , u(k,j,i) )
    31613131                tend(k,j,i) = tend(k,j,i) + ( - rot_tend_x(k,j,i)              &
    31623132                            - tend_nac_x - tend_tow_x )                        &
     
    31723142             DO  k = nzb+1,  MAXVAL(k_hub) + MAXVAL(k_smear)
    31733143                tend_nac_y = 0.5_wp * nac_cd_surf(k,j,i) *                     &
    3174                                    SIGN( v(k,j,i)**2 , v(k,j,i) )     
     3144                                   SIGN( v(k,j,i)**2 , v(k,j,i) )
    31753145                tend_tow_y   = 0.5_wp * tow_cd_surf(k,j,i) *                   &
    3176                                    SIGN( v(k,j,i)**2 , v(k,j,i) )                     
     3146                                   SIGN( v(k,j,i)**2 , v(k,j,i) )
    31773147                tend(k,j,i) = tend(k,j,i) + ( - rot_tend_y(k,j,i)              &
    31783148                            - tend_nac_y - tend_tow_y )                        &
     
    32173187             ALLOCATE ( output_values_1d_target(1:n_turbines) )
    32183188             output_values_1d_target = hub_x(1:n_turbines)
    3219              output_values_1d_pointer => output_values_1d_target     
     3189             output_values_1d_pointer => output_values_1d_target
    32203190             return_value = dom_write_var( nc_filename,                              &
    32213191                                        'x',                                         &
     
    32253195
    32263196             output_values_1d_target = hub_y(1:n_turbines)
    3227              output_values_1d_pointer => output_values_1d_target     
     3197             output_values_1d_pointer => output_values_1d_target
    32283198             return_value = dom_write_var( nc_filename,                              &
    32293199                                        'y',                                         &
     
    32333203
    32343204             output_values_1d_target = hub_z(1:n_turbines)
    3235              output_values_1d_pointer => output_values_1d_target     
     3205             output_values_1d_pointer => output_values_1d_target
    32363206             return_value = dom_write_var( nc_filename,                              &
    32373207                                        'z',                                         &
    32383208                                        values_realwp_1d = output_values_1d_pointer, &
    32393209                                        bounds_start = (/1/),                        &
    3240                                         bounds_end   = (/n_turbines/) )                                       
    3241                                        
     3210                                        bounds_end   = (/n_turbines/) )
     3211
     3212             output_values_1d_target = rotor_radius(1:n_turbines) * 2.0_wp
     3213             output_values_1d_pointer => output_values_1d_target
     3214             return_value = dom_write_var( nc_filename,                              &
     3215                                        'rotor_diameter',                            &
     3216                                        values_realwp_1d = output_values_1d_pointer, &
     3217                                        bounds_start = (/1/),                        &
     3218                                        bounds_end   = (/n_turbines/) )
     3219
     3220             output_values_1d_target = tower_diameter(1:n_turbines)
     3221             output_values_1d_pointer => output_values_1d_target
     3222             return_value = dom_write_var( nc_filename,                              &
     3223                                        'tower_diameter',                            &
     3224                                        values_realwp_1d = output_values_1d_pointer, &
     3225                                        bounds_start = (/1/),                        &
     3226                                        bounds_end   = (/n_turbines/) )
     3227
    32423228             initial_write_coordinates = .TRUE.
    32433229             DEALLOCATE ( output_values_1d_target )
    32443230          ENDIF
    3245          
     3231
    32463232          t_ind = t_ind + 1
    32473233         
Note: See TracChangeset for help on using the changeset viewer.