1
0
Fork 0
fgdata/Environment/metarinterpolator.xml
Torsten Dreyer edbff6bd34 Refactor weather-utility.nas
A bug in weather-utility.nas caused constant computation
of wave parameters due to the fact that the wind speed
was ignored.

That code was ugly anyway, so it has been replaced by
property rules which don't create work for the nasal
garbage collector.

All required properties for the wave shader are now in
interpolator.xml, the snow-line computation lives in
metarinterpolator.xml
2012-01-19 00:05:48 +01:00

437 lines
16 KiB
XML

<?xml version="1.0" ?>
<!--
This file is part of FlightGear, the free flight simulator
http://www.flightgear.org/
Copyright (C) 2009 Torsten Dreyer, Torsten (at) t3r _dot_ de
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
-->
<!--
Interpolate the METAR weather values over time and write
the environment values in /environment/config/*
All filters are enabled if /environment/metar/valid=true
-->
<PropertyList>
<filter>
<!--
transfer the METAR QNH to the interpolation controller
limit the rate of change to approx 0.01hpa/sec
-->
<name>MetarController:pressure-sea-level-inhg</name>
<type>noise-spike</type>
<max-rate-of-change>0.006</max-rate-of-change>
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
</condition>
</enable>
<input>/environment/metar/pressure-sea-level-inhg</input>
<output>/environment/config/boundary/entry/pressure-sea-level-inhg</output>
<output>/environment/config/aloft/entry/pressure-sea-level-inhg</output>
</filter>
<filter>
<!--
transfer the sea-level temperature to each layer of
interpolation controller. We have no idea here about
the temperature gradient, so just assume ISA.
-->
<name>MetarController:temperature-sea-level-degc</name>
<type>noise-spike</type>
<max-rate-of-change>0.01667</max-rate-of-change>
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
</condition>
</enable>
<input>/environment/metar/temperature-sea-level-degc</input>
<output>/environment/config/boundary/entry[0]/temperature-sea-level-degc</output>
<output>/environment/config/boundary/entry[1]/temperature-sea-level-degc</output>
<output>/environment/config/aloft/entry[0]/temperature-sea-level-degc</output>
<output>/environment/config/aloft/entry[1]/temperature-sea-level-degc</output>
<output>/environment/config/aloft/entry[2]/temperature-sea-level-degc</output>
<output>/environment/config/aloft/entry[3]/temperature-sea-level-degc</output>
<output>/environment/config/aloft/entry[4]/temperature-sea-level-degc</output>
</filter>
<filter>
<!--
transfer the sea-level dewpoint to each layer of
interpolation controller. This is most certainly
wrong in most cases.
-->
<name>MetarController:dewpoint-sea-level-degc</name>
<type>noise-spike</type>
<max-rate-of-change>0.01667</max-rate-of-change>
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
</condition>
</enable>
<input>/environment/metar/dewpoint-sea-level-degc</input>
<output>/environment/config/boundary/entry[0]/dewpoint-sea-level-degc</output>
<output>/environment/config/boundary/entry[1]/dewpoint-sea-level-degc</output>
<output>/environment/config/aloft/entry[0]/dewpoint-sea-level-degc</output>
<output>/environment/config/aloft/entry[1]/dewpoint-sea-level-degc</output>
<output>/environment/config/aloft/entry[2]/dewpoint-sea-level-degc</output>
<output>/environment/config/aloft/entry[3]/dewpoint-sea-level-degc</output>
<output>/environment/config/aloft/entry[4]/dewpoint-sea-level-degc</output>
</filter>
<filter>
<!--
transfer the visibility to each layer of
interpolation controller. We are not very creative here and
use the same visibility for all layers but top four which
are left untouched.
-->
<name>MetarController:visibility-m</name>
<type>exponential</type>
<filter-time>5</filter-time>
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
</condition>
</enable>
<input>/environment/metar/min-visibility-m</input>
<output>/environment/config/boundary/entry[0]/visibility-m</output>
<output>/environment/config/boundary/entry[1]/visibility-m</output>
<output>/environment/config/aloft/entry[0]/visibility-m</output>
</filter>
<filter>
<!--
transfer the rain intensity to the target environment
-->
<name>MetarController:rain-norm</name>
<type>noise-spike</type>
<max-rate-of-change>1.0</max-rate-of-change>
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
</condition>
</enable>
<input>/environment/metar/rain-norm</input>
<output>/environment/rain-norm</output>
</filter>
<filter>
<!--
transfer the snow intensity to the target environment
-->
<name>MetarController:snow-norm</name>
<type>noise-spike</type>
<max-rate-of-change>1.0</max-rate-of-change>
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
</condition>
</enable>
<input>/environment/metar/snow-norm</input>
<output>/environment/snow-norm</output>
</filter>
<!-- interpolate the wind vector's components -->
<filter>
<name>MetarController:wind-from-north-fps</name>
<type>exponential</type>
<filter-time>30</filter-time>
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
</condition>
</enable>
<input>/environment/metar/base-wind-from-north-fps</input>
<output>/environment/config/boundary/entry[0]/wind-from-north-fps</output>
</filter>
<filter>
<name>MetarController:wind-from-east-fps</name>
<type>exponential</type>
<filter-time>30</filter-time>
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
</condition>
</enable>
<input>/environment/metar/base-wind-from-east-fps</input>
<output>/environment/config/boundary/entry[0]/wind-from-east-fps</output>
</filter>
<!-- Adjust the wind-vector for the layers -->
<!-- TODO: handle variable winds -->
<filter include="layer-heading-offset.xml"/>
<filter include="layer-heading-offset.xml">
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
<property>/environment/params/metar-updates-winds-aloft</property>
</condition>
</enable>
<input>
<offset>/environment/config/aloft/entry[0]/wind-heading-change-deg</offset>
</input>
<output>/environment/config/aloft/entry[0]/wind-from-heading-deg</output>
</filter>
<filter include="layer-heading-offset.xml">
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
<property>/environment/params/metar-updates-winds-aloft</property>
</condition>
</enable>
<input>
<offset>/environment/config/aloft/entry[1]/wind-heading-change-deg</offset>
</input>
<output>/environment/config/aloft/entry[1]/wind-from-heading-deg</output>
</filter>
<filter include="layer-heading-offset.xml">
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
<property>/environment/params/metar-updates-winds-aloft</property>
</condition>
</enable>
<input>
<offset>/environment/config/aloft/entry[2]/wind-heading-change-deg</offset>
</input>
<output>/environment/config/aloft/entry[2]/wind-from-heading-deg</output>
</filter>
<filter include="layer-heading-offset.xml">
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
<property>/environment/params/metar-updates-winds-aloft</property>
</condition>
</enable>
<input>
<offset>/environment/config/aloft/entry[3]/wind-heading-change-deg</offset>
</input>
<output>/environment/config/aloft/entry[3]/wind-from-heading-deg</output>
</filter>
<filter include="layer-heading-offset.xml">
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
<property>/environment/params/metar-updates-winds-aloft</property>
</condition>
</enable>
<input>
<offset>/environment/config/aloft/entry[4]/wind-heading-change-deg</offset>
</input>
<output>/environment/config/aloft/entry[4]/wind-from-heading-deg</output>
</filter>
<filter include="layer-speed-change.xml"/>
<filter include="layer-speed-change.xml">
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
<property>/environment/params/metar-updates-winds-aloft</property>
</condition>
</enable>
<input>
<offset>/environment/config/aloft/entry[0]/wind-speed-change-rel</offset>
</input>
<output>/environment/config/aloft/entry[0]/wind-speed-kt</output>
</filter>
<filter include="layer-speed-change.xml">
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
<property>/environment/params/metar-updates-winds-aloft</property>
</condition>
</enable>
<input>
<offset>/environment/config/aloft/entry[1]/wind-speed-change-rel</offset>
</input>
<output>/environment/config/aloft/entry[1]/wind-speed-kt</output>
</filter>
<filter include="layer-speed-change.xml">
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
<property>/environment/params/metar-updates-winds-aloft</property>
</condition>
</enable>
<input>
<offset>/environment/config/aloft/entry[2]/wind-speed-change-rel</offset>
</input>
<output>/environment/config/aloft/entry[2]/wind-speed-kt</output>
</filter>
<filter include="layer-speed-change.xml">
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
<property>/environment/params/metar-updates-winds-aloft</property>
</condition>
</enable>
<input>
<offset>/environment/config/aloft/entry[3]/wind-speed-change-rel</offset>
</input>
<output>/environment/config/aloft/entry[3]/wind-speed-kt</output>
</filter>
<filter include="layer-speed-change.xml">
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
<property>/environment/params/metar-updates-winds-aloft</property>
</condition>
</enable>
<input>
<offset>/environment/config/aloft/entry[4]/wind-speed-change-rel</offset>
</input>
<output>/environment/config/aloft/entry[4]/wind-speed-kt</output>
</filter>
<!-- Clouds -->
<filter include="clouds-altitude-interpolate.xml"/>
<filter include="clouds-altitude-interpolate.xml">
<params>
<from>/environment/metar/clouds/layer[1]/elevation-ft</from>
<to>/environment/clouds/layer[1]/elevation-ft</to>
</params>
</filter>
<filter include="clouds-altitude-interpolate.xml">
<params>
<from>/environment/metar/clouds/layer[2]/elevation-ft</from>
<to>/environment/clouds/layer[2]/elevation-ft</to>
</params>
</filter>
<filter include="clouds-altitude-interpolate.xml">
<params>
<from>/environment/metar/clouds/layer[3]/elevation-ft</from>
<to>/environment/clouds/layer[3]/elevation-ft</to>
</params>
</filter>
<filter include="clouds-altitude-interpolate.xml">
<params>
<from>/environment/metar/clouds/layer[4]/elevation-ft</from>
<to>/environment/clouds/layer[4]/elevation-ft</to>
</params>
</filter>
<filter include="clouds-thickness.xml"/>
<filter include="clouds-thickness.xml">
<input>/environment/metar/clouds/layer[1]/thickness-ft</input>
<output>/environment/clouds/layer[1]/thickness-ft</output>
</filter>
<filter include="clouds-thickness.xml">
<input>/environment/metar/clouds/layer[2]/thickness-ft</input>
<output>/environment/clouds/layer[2]/thickness-ft</output>
</filter>
<filter include="clouds-thickness.xml">
<input>/environment/metar/clouds/layer[3]/thickness-ft</input>
<output>/environment/clouds/layer[3]/thickness-ft</output>
</filter>
<filter include="clouds-thickness.xml">
<input>/environment/metar/clouds/layer[4]/thickness-ft</input>
<output>/environment/clouds/layer[4]/thickness-ft</output>
</filter>
<filter include="clouds-coverage.xml"/>
<filter include="clouds-coverage.xml">
<params>
<from>/environment/metar/clouds/layer[1]/coverage-type</from>
<to>environment/clouds/layer[1]/coverage-type</to>
</params>
</filter>
<filter include="clouds-coverage.xml">
<params>
<from>/environment/metar/clouds/layer[2]/coverage-type</from>
<to>environment/clouds/layer[2]/coverage-type</to>
</params>
</filter>
<filter include="clouds-coverage.xml">
<params>
<from>/environment/metar/clouds/layer[3]/coverage-type</from>
<to>environment/clouds/layer[3]/coverage-type</to>
</params>
</filter>
<filter include="clouds-coverage.xml">
<params>
<from>/environment/metar/clouds/layer[4]/coverage-type</from>
<to>environment/clouds/layer[4]/coverage-type</to>
</params>
</filter>
<filter>
<name>MetarController:cloud-visibility-m</name>
<type>exponential</type>
<filter-time>5</filter-time>
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
</condition>
</enable>
<input>/environment/metar/clouds/layer[0]/visibility-m</input>
<output>/environment/clouds/layer[0]/visibility-m</output>
</filter>
<filter>
<name>MetarController:cloud-alpha</name>
<type>exponential</type>
<filter-time>5</filter-time>
<enable>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/params/metar-updates-environment</property>
</condition>
</enable>
<input>/environment/metar/clouds/layer[0]/alpha</input>
<output>/environment/clouds/layer[0]/alpha</output>
</filter>
<!-- replace weather-utility.nas
# Put the snow line slightly below the station's elevation,
# so the station is completely covered with snow
-->
<filter>
<name>MetarController:snow-level</name>
<type>gain</type>
<gain>1.0</gain>
<input>
<condition>
<property>/environment/metar/valid</property>
<property>/environment/metar/snow-cover</property>
</condition>
<expression>
<sum>
<product>
<property>/environment/metar/station-elevation-ft</property>
<value>0.3048</value>
</product>
<value>-50.0</value>
</sum>
</expression>
</input>
<input>3200</input>
<output>/environment/snow-level-m</output>
<max>3200</max>
</filter>
</PropertyList>