diff --git a/-/Scripts/Activate.ps1 b/-/Scripts/Activate.ps1 new file mode 100644 index 0000000..dbbf985 --- /dev/null +++ b/-/Scripts/Activate.ps1 @@ -0,0 +1,502 @@ +<# +.Synopsis +Activate a Python virtual environment for the current PowerShell session. + +.Description +Pushes the python executable for a virtual environment to the front of the +$Env:PATH environment variable and sets the prompt to signify that you are +in a Python virtual environment. Makes use of the command line switches as +well as the `pyvenv.cfg` file values present in the virtual environment. + +.Parameter VenvDir +Path to the directory that contains the virtual environment to activate. The +default value for this is the parent of the directory that the Activate.ps1 +script is located within. + +.Parameter Prompt +The prompt prefix to display when this virtual environment is activated. By +default, this prompt is the name of the virtual environment folder (VenvDir) +surrounded by parentheses and followed by a single space (ie. '(.venv) '). + +.Example +Activate.ps1 +Activates the Python virtual environment that contains the Activate.ps1 script. + +.Example +Activate.ps1 -Verbose +Activates the Python virtual environment that contains the Activate.ps1 script, +and shows extra information about the activation as it executes. + +.Example +Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv +Activates the Python virtual environment located in the specified location. + +.Example +Activate.ps1 -Prompt "MyPython" +Activates the Python virtual environment that contains the Activate.ps1 script, +and prefixes the current prompt with the specified string (surrounded in +parentheses) while the virtual environment is active. + +.Notes +On Windows, it may be required to enable this Activate.ps1 script by setting the +execution policy for the user. You can do this by issuing the following PowerShell +command: + +PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser + +For more information on Execution Policies: +https://go.microsoft.com/fwlink/?LinkID=135170 + +#> +Param( + [Parameter(Mandatory = $false)] + [String] + $VenvDir, + [Parameter(Mandatory = $false)] + [String] + $Prompt +) + +<# Function declarations --------------------------------------------------- #> + +<# +.Synopsis +Remove all shell session elements added by the Activate script, including the +addition of the virtual environment's Python executable from the beginning of +the PATH variable. + +.Parameter NonDestructive +If present, do not remove this function from the global namespace for the +session. + +#> +function global:deactivate ([switch]$NonDestructive) { + # Revert to original values + + # The prior prompt: + if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { + Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt + Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT + } + + # The prior PYTHONHOME: + if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { + Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME + Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME + } + + # The prior PATH: + if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { + Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH + Remove-Item -Path Env:_OLD_VIRTUAL_PATH + } + + # Just remove the VIRTUAL_ENV altogether: + if (Test-Path -Path Env:VIRTUAL_ENV) { + Remove-Item -Path env:VIRTUAL_ENV + } + + # Just remove VIRTUAL_ENV_PROMPT altogether. + if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { + Remove-Item -Path env:VIRTUAL_ENV_PROMPT + } + + # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: + if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { + Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force + } + + # Leave deactivate function in the global namespace if requested: + if (-not $NonDestructive) { + Remove-Item -Path function:deactivate + } +} + +<# +.Description +Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the +given folder, and returns them in a map. + +For each line in the pyvenv.cfg file, if that line can be parsed into exactly +two strings separated by `=` (with any amount of whitespace surrounding the =) +then it is considered a `key = value` line. The left hand string is the key, +the right hand is the value. + +If the value starts with a `'` or a `"` then the first and last character is +stripped from the value before being captured. + +.Parameter ConfigDir +Path to the directory that contains the `pyvenv.cfg` file. +#> +function Get-PyVenvConfig( + [String] + $ConfigDir +) { + Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" + + # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). + $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue + + # An empty map will be returned if no config file is found. + $pyvenvConfig = @{ } + + if ($pyvenvConfigPath) { + + Write-Verbose "File exists, parse `key = value` lines" + $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath + + $pyvenvConfigContent | ForEach-Object { + $keyval = $PSItem -split "\s*=\s*", 2 + if ($keyval[0] -and $keyval[1]) { + $val = $keyval[1] + + # Remove extraneous quotations around a string value. + if ("'""".Contains($val.Substring(0, 1))) { + $val = $val.Substring(1, $val.Length - 2) + } + + $pyvenvConfig[$keyval[0]] = $val + Write-Verbose "Adding Key: '$($keyval[0])'='$val'" + } + } + } + return $pyvenvConfig +} + + +<# Begin Activate script --------------------------------------------------- #> + +# Determine the containing directory of this script +$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition +$VenvExecDir = Get-Item -Path $VenvExecPath + +Write-Verbose "Activation script is located in path: '$VenvExecPath'" +Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" +Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" + +# Set values required in priority: CmdLine, ConfigFile, Default +# First, get the location of the virtual environment, it might not be +# VenvExecDir if specified on the command line. +if ($VenvDir) { + Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" +} +else { + Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." + $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") + Write-Verbose "VenvDir=$VenvDir" +} + +# Next, read the `pyvenv.cfg` file to determine any required value such +# as `prompt`. +$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir + +# Next, set the prompt from the command line, or the config file, or +# just use the name of the virtual environment folder. +if ($Prompt) { + Write-Verbose "Prompt specified as argument, using '$Prompt'" +} +else { + Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" + if ($pyvenvCfg -and $pyvenvCfg['prompt']) { + Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" + $Prompt = $pyvenvCfg['prompt']; + } + else { + Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" + Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" + $Prompt = Split-Path -Path $venvDir -Leaf + } +} + +Write-Verbose "Prompt = '$Prompt'" +Write-Verbose "VenvDir='$VenvDir'" + +# Deactivate any currently active virtual environment, but leave the +# deactivate function in place. +deactivate -nondestructive + +# Now set the environment variable VIRTUAL_ENV, used by many tools to determine +# that there is an activated venv. +$env:VIRTUAL_ENV = $VenvDir + +if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { + + Write-Verbose "Setting prompt to '$Prompt'" + + # Set the prompt to include the env name + # Make sure _OLD_VIRTUAL_PROMPT is global + function global:_OLD_VIRTUAL_PROMPT { "" } + Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT + New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt + + function global:prompt { + Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " + _OLD_VIRTUAL_PROMPT + } + $env:VIRTUAL_ENV_PROMPT = $Prompt +} + +# Clear PYTHONHOME +if (Test-Path -Path Env:PYTHONHOME) { + Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME + Remove-Item -Path Env:PYTHONHOME +} + +# Add the venv to the PATH +Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH +$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" + +# SIG # Begin signature block +# MIIvIwYJKoZIhvcNAQcCoIIvFDCCLxACAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBnL745ElCYk8vk +# dBtMuQhLeWJ3ZGfzKW4DHCYzAn+QB6CCE8MwggWQMIIDeKADAgECAhAFmxtXno4h +# MuI5B72nd3VcMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0xMzA4MDExMjAwMDBaFw0z +# ODAxMTUxMjAwMDBaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ +# bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0 +# IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +# AL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3EMB/z +# G6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKyunWZ +# anMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsFxl7s +# Wxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU15zHL +# 2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJBMtfb +# BHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObURWBf3 +# JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6nj3c +# AORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxBYKqx +# YxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5SUUd0 +# viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+xq4aL +# T8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjQjBAMA8GA1Ud +# EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTs1+OC0nFdZEzf +# Lmc/57qYrhwPTzANBgkqhkiG9w0BAQwFAAOCAgEAu2HZfalsvhfEkRvDoaIAjeNk +# aA9Wz3eucPn9mkqZucl4XAwMX+TmFClWCzZJXURj4K2clhhmGyMNPXnpbWvWVPjS +# PMFDQK4dUPVS/JA7u5iZaWvHwaeoaKQn3J35J64whbn2Z006Po9ZOSJTROvIXQPK +# 7VB6fWIhCoDIc2bRoAVgX+iltKevqPdtNZx8WorWojiZ83iL9E3SIAveBO6Mm0eB +# cg3AFDLvMFkuruBx8lbkapdvklBtlo1oepqyNhR6BvIkuQkRUNcIsbiJeoQjYUIp +# 5aPNoiBB19GcZNnqJqGLFNdMGbJQQXE9P01wI4YMStyB0swylIQNCAmXHE/A7msg +# dDDS4Dk0EIUhFQEI6FUy3nFJ2SgXUE3mvk3RdazQyvtBuEOlqtPDBURPLDab4vri +# RbgjU2wGb2dVf0a1TD9uKFp5JtKkqGKX0h7i7UqLvBv9R0oN32dmfrJbQdA75PQ7 +# 9ARj6e/CVABRoIoqyc54zNXqhwQYs86vSYiv85KZtrPmYQ/ShQDnUBrkG5WdGaG5 +# nLGbsQAe79APT0JsyQq87kP6OnGlyE0mpTX9iV28hWIdMtKgK1TtmlfB2/oQzxm3 +# i0objwG2J5VT6LaJbVu8aNQj6ItRolb58KaAoNYes7wPD1N1KarqE3fk3oyBIa0H +# EEcRrYc9B9F1vM/zZn4wggawMIIEmKADAgECAhAIrUCyYNKcTJ9ezam9k67ZMA0G +# CSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ +# bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0 +# IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0zNjA0MjgyMzU5NTla +# MGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UE +# AxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcgUlNBNDA5NiBTSEEz +# ODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDVtC9C +# 0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0JAfhS0/TeEP0F9ce +# 2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJrQ5qZ8sU7H/Lvy0da +# E6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhFLqGfLOEYwhrMxe6T +# SXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+FLEikVoQ11vkunKoA +# FdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh3K3kGKDYwSNHR7Oh +# D26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJwZPt4bRc4G/rJvmM +# 1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQayg9Rc9hUZTO1i4F4z +# 8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbIYViY9XwCFjyDKK05 +# huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchApQfDVxW0mdmgRQRNY +# mtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRroOBl8ZhzNeDhFMJlP +# /2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IBWTCCAVUwEgYDVR0T +# AQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHwYD +# VR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMG +# A1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYY +# aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2Fj +# ZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNV +# HR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRU +# cnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAEDMAgGBmeBDAEEATAN +# BgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql+Eg08yy25nRm95Ry +# sQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFFUP2cvbaF4HZ+N3HL +# IvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1hmYFW9snjdufE5Btf +# Q/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3RywYFzzDaju4ImhvTnh +# OE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5UbdldAhQfQDN8A+KVssIh +# dXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw8MzK7/0pNVwfiThV +# 9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnPLqR0kq3bPKSchh/j +# wVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatEQOON8BUozu3xGFYH +# Ki8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bnKD+sEq6lLyJsQfmC +# XBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQjiWQ1tygVQK+pKHJ6l +# /aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbqyK+p/pQd52MbOoZW +# eE4wggd3MIIFX6ADAgECAhAHHxQbizANJfMU6yMM0NHdMA0GCSqGSIb3DQEBCwUA +# MGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UE +# AxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcgUlNBNDA5NiBTSEEz +# ODQgMjAyMSBDQTEwHhcNMjIwMTE3MDAwMDAwWhcNMjUwMTE1MjM1OTU5WjB8MQsw +# CQYDVQQGEwJVUzEPMA0GA1UECBMGT3JlZ29uMRIwEAYDVQQHEwlCZWF2ZXJ0b24x +# IzAhBgNVBAoTGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uMSMwIQYDVQQDExpQ +# eXRob24gU29mdHdhcmUgRm91bmRhdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +# ADCCAgoCggIBAKgc0BTT+iKbtK6f2mr9pNMUTcAJxKdsuOiSYgDFfwhjQy89koM7 +# uP+QV/gwx8MzEt3c9tLJvDccVWQ8H7mVsk/K+X+IufBLCgUi0GGAZUegEAeRlSXx +# xhYScr818ma8EvGIZdiSOhqjYc4KnfgfIS4RLtZSrDFG2tN16yS8skFa3IHyvWdb +# D9PvZ4iYNAS4pjYDRjT/9uzPZ4Pan+53xZIcDgjiTwOh8VGuppxcia6a7xCyKoOA +# GjvCyQsj5223v1/Ig7Dp9mGI+nh1E3IwmyTIIuVHyK6Lqu352diDY+iCMpk9Zanm +# SjmB+GMVs+H/gOiofjjtf6oz0ki3rb7sQ8fTnonIL9dyGTJ0ZFYKeb6BLA66d2GA +# LwxZhLe5WH4Np9HcyXHACkppsE6ynYjTOd7+jN1PRJahN1oERzTzEiV6nCO1M3U1 +# HbPTGyq52IMFSBM2/07WTJSbOeXjvYR7aUxK9/ZkJiacl2iZI7IWe7JKhHohqKuc +# eQNyOzxTakLcRkzynvIrk33R9YVqtB4L6wtFxhUjvDnQg16xot2KVPdfyPAWd81w +# tZADmrUtsZ9qG79x1hBdyOl4vUtVPECuyhCxaw+faVjumapPUnwo8ygflJJ74J+B +# Yxf6UuD7m8yzsfXWkdv52DjL74TxzuFTLHPyARWCSCAbzn3ZIly+qIqDAgMBAAGj +# ggIGMIICAjAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4E +# FgQUt/1Teh2XDuUj2WW3siYWJgkZHA8wDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQM +# MAoGCCsGAQUFBwMDMIG1BgNVHR8Ega0wgaowU6BRoE+GTWh0dHA6Ly9jcmwzLmRp +# Z2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNBNDA5NlNI +# QTM4NDIwMjFDQTEuY3JsMFOgUaBPhk1odHRwOi8vY3JsNC5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZTSEEzODQyMDIxQ0Ex +# LmNybDA+BgNVHSAENzA1MDMGBmeBDAEEATApMCcGCCsGAQUFBwIBFhtodHRwOi8v +# d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUF +# BzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6 +# Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWdu +# aW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZI +# hvcNAQELBQADggIBABxv4AeV/5ltkELHSC63fXAFYS5tadcWTiNc2rskrNLrfH1N +# s0vgSZFoQxYBFKI159E8oQQ1SKbTEubZ/B9kmHPhprHya08+VVzxC88pOEvz68nA +# 82oEM09584aILqYmj8Pj7h/kmZNzuEL7WiwFa/U1hX+XiWfLIJQsAHBla0i7QRF2 +# de8/VSF0XXFa2kBQ6aiTsiLyKPNbaNtbcucaUdn6vVUS5izWOXM95BSkFSKdE45O +# q3FForNJXjBvSCpwcP36WklaHL+aHu1upIhCTUkzTHMh8b86WmjRUqbrnvdyR2yd +# I5l1OqcMBjkpPpIV6wcc+KY/RH2xvVuuoHjlUjwq2bHiNoX+W1scCpnA8YTs2d50 +# jDHUgwUo+ciwpffH0Riq132NFmrH3r67VaN3TuBxjI8SIZM58WEDkbeoriDk3hxU +# 8ZWV7b8AW6oyVBGfM06UgkfMb58h+tJPrFx8VI/WLq1dTqMfZOm5cuclMnUHs2uq +# rRNtnV8UfidPBL4ZHkTcClQbCoz0UbLhkiDvIS00Dn+BBcxw/TKqVL4Oaz3bkMSs +# M46LciTeucHY9ExRVt3zy7i149sd+F4QozPqn7FrSVHXmem3r7bjyHTxOgqxRCVa +# 18Vtx7P/8bYSBeS+WHCKcliFCecspusCDSlnRUjZwyPdP0VHxaZg2unjHY3rMYIa +# tjCCGrICAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIElu +# Yy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJT +# QTQwOTYgU0hBMzg0IDIwMjEgQ0ExAhAHHxQbizANJfMU6yMM0NHdMA0GCWCGSAFl +# AwQCAQUAoIHIMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC +# AQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCBnAZ6P7YvTwq0fbF62 +# o7E75R0LxsW5OtyYiFESQckLhjBcBgorBgEEAYI3AgEMMU4wTKBGgEQAQgB1AGkA +# bAB0ADoAIABSAGUAbABlAGEAcwBlAF8AdgAzAC4AMQAxAC4AOQBfADIAMAAyADQA +# MAA0ADAAMgAuADAAMqECgAAwDQYJKoZIhvcNAQEBBQAEggIAg5wQO5NiKFirm9vr +# 1//X5G4t+z318Uagu8vJT/vTjkMTau86CF+SwP3pqC1H2ZMUyVYmVHae5dswKAMR +# hHY1VJV/0lJI+LdYcaxHI/WYzaFLbDrQI/Mty5cabjveG6geMlcJG4nYZlyQX+fJ +# 1k0ogeIF1owldecXP8t5e10WlHBlWb8IBnIPwMtJVZ2/y8NASxsnSJE7pEe7ijGe +# 5Bv9DXvoltKnMSVYv9u2vn7PeIq+Jm3n3kOGSIYtfdytEd1Fd6spfdcmIhqyzVk0 +# Hslq7Aqd7soT0xdmNa/amzEA4HRHpWGUhzOtcC+EqEIIJk9kTjyVgCiyWaB5gGko +# OAZfsxQn+a916iWwA7RrQ+TzBZq/pleUTLZzJmI3DXFjuJ1NDP6Sdw6KREgx6Yw4 +# q2NnnodKlGZkMDcGYPTM2sA4i6i6FsznWY4d8wE4J261YeUrVfIyTx+Q81W4KXoi +# C0x7Pe9Bjh4oJGM3YiLyhVL56sXZWxAC2C/vD3nvIvra9EpvlMvQh6b0xl0V4TSN +# dJ7T7VttR/WNjau46JIgbGZWCDBTTUAydQNoAZ4KnCrcIZCN6Y0qVokXsYHsVIto +# TsnM2+Ca09wxuOIfCOSKpAmqdJ/w2NwLwp+0gwrO2uzpCfbSbkAd+UQNv0joPyUp +# ywmsQndxqA8TaADp8TfkkpJywJGhghc/MIIXOwYKKwYBBAGCNwMDATGCFyswghcn +# BgkqhkiG9w0BBwKgghcYMIIXFAIBAzEPMA0GCWCGSAFlAwQCAQUAMHcGCyqGSIb3 +# DQEJEAEEoGgEZjBkAgEBBglghkgBhv1sBwEwMTANBglghkgBZQMEAgEFAAQg+Jhe +# IOzOttA8vliuL+r3CiY4EJTzfvPasXkI/vwkoI8CEHZ95Ht1TmSmU8+fM0kIG00Y +# DzIwMjQwNDAyMTIzMjEwWqCCEwkwggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f +# 5WEWMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdp +# Q2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2 +# IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEz +# MjM1OTU5WjBIMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4x +# IDAeBgNVBAMTF0RpZ2lDZXJ0IFRpbWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0B +# AQEFAAOCAg8AMIICCgKCAgEAo1NFhx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6 +# OyqcZ9xiFVjBqZMRp82qsmrdECmKHmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp +# 52n+W8PWKyAcwZeUtKVQgfLPywemMGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF +# 6g1hbJ3+cV7EBpo88MUueQ8bZlLjyNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G4 +# 5lKVtUfXeCk5a+B4WZfjRCtK1ZXO7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7p +# Be6q9iT1HbybHLK3X9/w7nZ9MZllR1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAs +# NJvj3m5kGQc3AZEPHLVRzapMZoOIaGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU +# 6mIIE9NpHnxkTZ0P387RXoyqq1AVybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwK +# WEwAPoVpdceDZNZ1zY8SdlalJPrXxGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFx +# smxxrz64b5bV4RAT/mFHCoz+8LbH1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbR +# yV8IpHCj7ArxES5k4MsiK8rxKBMhSVF+BmbTO77665E42FEHypS34lCh8zrTioPL +# QHsCAwEAAaOCAYswggGHMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYG +# A1UdJQEB/wQMMAoGCCsGAQUFBwMIMCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCG +# SAGG/WwHATAfBgNVHSMEGDAWgBS6FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4E +# FgQUpbbvE+fvzdBkodVWqWUxo97V40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDov +# L2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1 +# NlRpbWVTdGFtcGluZ0NBLmNybDCBkAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUH +# MAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDov +# L2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNI +# QTI1NlRpbWVTdGFtcGluZ0NBLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCp +# tZgXvHCNT4o8aJzYJf/LLOTN6l0ikuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX +# 4WCcK+3tPUiOuGu6fF29wmE3aEl3o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoF +# eoQpmLZXeY/bJlYrsPOnvTcM2Jh2T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+nji +# kxp2oml101DkRBK+IA2eqUTQ+OVJdwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBB +# Jt3eWpdPM43UjXd9dUWhpVgmagNF3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJ +# A+rUkTfvTVLzyWAhxFZH7doRS4wyw4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcs +# QdCaM0qoNtS5cpZ+l3k4SF/Kwtw9Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE +# 5jreODsHXjlY9HxzMVWggBHLFAx+rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS +# 2Dq4sUaGa7oX/cR3bBVsrquvczroSUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3 +# CtQC4Fxguyj/OOVSWtasFyIjTvTs0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUb +# c7aZ+WssBkbvQR7w8F/g29mtkIBEr4AQQYowggauMIIElqADAgECAhAHNje3JFR8 +# 2Ees/ShmKl5bMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0z +# NzAzMjIyMzU5NTlaMGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1 +# NiBUaW1lU3RhbXBpbmcgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +# AQDGhjUGSbPBPXJJUVXHJQPE8pE3qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI +# 82j6ffOciQt/nR+eDzMfUBMLJnOWbfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9 +# xBd/qxkrPkLcZ47qUT3w1lbU5ygt69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ +# 3HxqV3rwN3mfXazL6IRktFLydkf3YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5Emfv +# DqVjbOSmxR3NNg1c1eYbqMFkdECnwHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDET +# qVcplicu9Yemj052FVUmcJgmf6AaRyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHe +# IhTZgirHkr+g3uM+onP65x9abJTyUpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jo +# n7ZGs506o9UD4L/wojzKQtwYSH8UNM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ +# 9FHzNklNiyDSLFc1eSuo80VgvCONWPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/T +# Xkt2ElGTyYwMO1uKIqjBJgj5FBASA31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJg +# o1gJASgADoRU7s7pXcheMBK9Rp6103a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkw +# EgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+e +# yG8wHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQD +# AgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEF +# BQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRw +# Oi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# dDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkUm9vdEc0LmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglg +# hkgBhv1sBwEwDQYJKoZIhvcNAQELBQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGw +# GC4QTRPPMFPOvxj7x1Bd4ksp+3CKDaopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0 +# MWfNthKWb8RQTGIdDAiCqBa9qVbPFXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1D +# X+1gtqpPkWaeLJ7giqzl/Yy8ZCaHbJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw +# 1YpxdmXazPByoyP6wCeCRK6ZJxurJB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY +# +/umnXKvxMfBwWpx2cYTgAnEtp/Nh4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0I +# SQ+UzTl63f8lY5knLD0/a6fxZsNBzU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr +# 5Dhzq6YBT70/O3itTK37xJV77QpfMzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7y +# Rp11LB4nLCbbbxV7HhmLNriT1ObyF5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDop +# hrCYoCvtlUG3OtUVmDG0YgkPCr2B2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/ +# AAvkdgIm2fBldkKmKYcJRyvmfxqkhQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMO +# Hds3OBqhK/bt1nz8MIIFjTCCBHWgAwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkq +# hkiG9w0BAQwFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5j +# MRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBB +# c3N1cmVkIElEIFJvb3QgQ0EwHhcNMjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5 +# WjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +# ExB3d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJv +# b3QgRzQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1K +# PDAiMGkz7MKnJS7JIT3yithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2r +# snnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C +# 8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBf +# sXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY +# QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8 +# rhsDdV14Ztk6MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaY +# dj1ZXUJ2h4mXaXpI8OCiEhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+ +# wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw +# ++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+N +# P8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7F +# wI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUw +# AwEB/zAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAU +# Reuir/SSy4IxLVGLp6chnfNtyA8wDgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEB +# BG0wazAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsG +# AQUFBzAChjdodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1 +# cmVkSURSb290Q0EuY3J0MEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRp +# Z2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAow +# CDAGBgRVHSAAMA0GCSqGSIb3DQEBDAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/ +# Vwe9mqyhhyzshV6pGrsi+IcaaVQi7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLe +# JLxSA8hO0Cre+i1Wz/n096wwepqLsl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE +# 1Od/6Fmo8L8vC6bp8jQ87PcDx4eo0kxAGTVGamlUsLihVo7spNU96LHc/RzY9Hda +# XFSMb++hUD38dglohJ9vytsgjTVgHAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbO +# byMt9H5xaiNrIv8SuFQtJ37YOtnwtoeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYID +# djCCA3ICAQEwdzBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIElu +# Yy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYg +# VGltZVN0YW1waW5nIENBAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUA +# oIHRMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcN +# MjQwNDAyMTIzMjEwWjArBgsqhkiG9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4Jd +# zqqKycZPGZzPQDAvBgkqhkiG9w0BCQQxIgQg58bvIvjFkyBb2O0xwLgtU8RJLcMV +# kvIdXiq3TCLuhq4wNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBX +# aEE2b4KK2lWarjMWr00amtQMeCgwDQYJKoZIhvcNAQEBBQAEggIAhU3imuIvql4+ +# IqPz0Anf0ZIB5hbafNTx1WEVhPEG9iJr24gpjbWvepQrbWJf0FBj8wY9GeRab6iv +# 79MMxZkPpR/DMK1qFr1vIlw67JhpqqNkaNIa5G3pAHDYdHYcB+Utw1p5XPOBRu0A +# f4wQ5fwWugys4CGGAboq4prLNRKeUGVexMDK7Eorsv9xmzK0tE9QSMA3SxLCcSIX +# mrMkKzTR3vn0dqaDG4Ge7U2w7dVnQYGBX+s6C9CCjvCtenCAQLbF+OyYhkMNDVtJ +# lTmzxxwyyA5fFZJpG/Wfo/84/P8lQXUTuwOBpFoLE65OqNEG03SoqKsW4aTqkVM7 +# b6fKLsygm1w23+UlHGF/fbExeqxgOZiuJWWt/OFy9T3HIcAF1SMh7mot5ciu7btS +# xjkr/fhsi1M3M1g/giyn0I8N24mgaICPtXAzAbZW7GSC0R5T2qnW6gYoAcY62Qdz +# jl/Ey1rnOQ26TuQODyPVHhfhoIBbdIDpDJ2Vu2mxyxUnjATbizphcBgsU1fBYvZR +# v+SuK1MYZOGqgzugfiufdeFAlBDA/e64yRkJvDBEkcyGvj6FS6nVm7ekJpJhLU3z +# sSSmcYwdx1YQCr48HEjcmGrj5sAzzg4U4WU/GrLWz2sSRmh5rKcDAa0ewfYi13Z2 +# a/cdr8Or2RQ5ZSQ8OHgr3GBw7koDWR8= +# SIG # End signature block diff --git a/-/Scripts/activate b/-/Scripts/activate new file mode 100644 index 0000000..ab2a745 --- /dev/null +++ b/-/Scripts/activate @@ -0,0 +1,63 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # Call hash to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + hash -r 2> /dev/null + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + unset VIRTUAL_ENV_PROMPT + if [ ! "${1:-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="C:\Users\zuiderwi\OneDrive - Stichting Deltares\Repositories\Software&Scoping\-" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/Scripts:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + PS1="(-) ${PS1:-}" + export PS1 + VIRTUAL_ENV_PROMPT="(-) " + export VIRTUAL_ENV_PROMPT +fi + +# Call hash to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +hash -r 2> /dev/null diff --git a/-/Scripts/activate.bat b/-/Scripts/activate.bat new file mode 100644 index 0000000..54a4cc0 --- /dev/null +++ b/-/Scripts/activate.bat @@ -0,0 +1,34 @@ +@echo off + +rem This file is UTF-8 encoded, so we need to update the current code page while executing it +for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do ( + set _OLD_CODEPAGE=%%a +) +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" 65001 > nul +) + +set VIRTUAL_ENV=C:\Users\zuiderwi\OneDrive - Stichting Deltares\Repositories\Software&Scoping\- + +if not defined PROMPT set PROMPT=$P$G + +if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT% +if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME% + +set _OLD_VIRTUAL_PROMPT=%PROMPT% +set PROMPT=(-) %PROMPT% + +if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME% +set PYTHONHOME= + +if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH% +if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH% + +set PATH=%VIRTUAL_ENV%\Scripts;%PATH% +set VIRTUAL_ENV_PROMPT=(-) + +:END +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul + set _OLD_CODEPAGE= +) diff --git a/-/Scripts/deactivate.bat b/-/Scripts/deactivate.bat new file mode 100644 index 0000000..62a39a7 --- /dev/null +++ b/-/Scripts/deactivate.bat @@ -0,0 +1,22 @@ +@echo off + +if defined _OLD_VIRTUAL_PROMPT ( + set "PROMPT=%_OLD_VIRTUAL_PROMPT%" +) +set _OLD_VIRTUAL_PROMPT= + +if defined _OLD_VIRTUAL_PYTHONHOME ( + set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" + set _OLD_VIRTUAL_PYTHONHOME= +) + +if defined _OLD_VIRTUAL_PATH ( + set "PATH=%_OLD_VIRTUAL_PATH%" +) + +set _OLD_VIRTUAL_PATH= + +set VIRTUAL_ENV= +set VIRTUAL_ENV_PROMPT= + +:END diff --git a/-/Scripts/debugpy.exe b/-/Scripts/debugpy.exe new file mode 100644 index 0000000..3871fe8 Binary files /dev/null and b/-/Scripts/debugpy.exe differ diff --git a/-/Scripts/f2py.exe b/-/Scripts/f2py.exe new file mode 100644 index 0000000..9bf63e3 Binary files /dev/null and b/-/Scripts/f2py.exe differ diff --git a/-/Scripts/ipython.exe b/-/Scripts/ipython.exe new file mode 100644 index 0000000..eafa7d5 Binary files /dev/null and b/-/Scripts/ipython.exe differ diff --git a/-/Scripts/ipython3.exe b/-/Scripts/ipython3.exe new file mode 100644 index 0000000..eafa7d5 Binary files /dev/null and b/-/Scripts/ipython3.exe differ diff --git a/-/Scripts/jupyter-kernel.exe b/-/Scripts/jupyter-kernel.exe new file mode 100644 index 0000000..b47ecc5 Binary files /dev/null and b/-/Scripts/jupyter-kernel.exe differ diff --git a/-/Scripts/jupyter-kernelspec.exe b/-/Scripts/jupyter-kernelspec.exe new file mode 100644 index 0000000..c73306d Binary files /dev/null and b/-/Scripts/jupyter-kernelspec.exe differ diff --git a/-/Scripts/jupyter-migrate.exe b/-/Scripts/jupyter-migrate.exe new file mode 100644 index 0000000..cfaa081 Binary files /dev/null and b/-/Scripts/jupyter-migrate.exe differ diff --git a/-/Scripts/jupyter-run.exe b/-/Scripts/jupyter-run.exe new file mode 100644 index 0000000..108a612 Binary files /dev/null and b/-/Scripts/jupyter-run.exe differ diff --git a/-/Scripts/jupyter-troubleshoot.exe b/-/Scripts/jupyter-troubleshoot.exe new file mode 100644 index 0000000..c545294 Binary files /dev/null and b/-/Scripts/jupyter-troubleshoot.exe differ diff --git a/-/Scripts/jupyter.exe b/-/Scripts/jupyter.exe new file mode 100644 index 0000000..59f532f Binary files /dev/null and b/-/Scripts/jupyter.exe differ diff --git a/-/Scripts/numpy-config.exe b/-/Scripts/numpy-config.exe new file mode 100644 index 0000000..970aac8 Binary files /dev/null and b/-/Scripts/numpy-config.exe differ diff --git a/-/Scripts/pip.exe b/-/Scripts/pip.exe new file mode 100644 index 0000000..82ec55e Binary files /dev/null and b/-/Scripts/pip.exe differ diff --git a/-/Scripts/pip3.11.exe b/-/Scripts/pip3.11.exe new file mode 100644 index 0000000..82ec55e Binary files /dev/null and b/-/Scripts/pip3.11.exe differ diff --git a/-/Scripts/pip3.exe b/-/Scripts/pip3.exe new file mode 100644 index 0000000..82ec55e Binary files /dev/null and b/-/Scripts/pip3.exe differ diff --git a/-/Scripts/pygmentize.exe b/-/Scripts/pygmentize.exe new file mode 100644 index 0000000..ba6e063 Binary files /dev/null and b/-/Scripts/pygmentize.exe differ diff --git a/-/Scripts/python.exe b/-/Scripts/python.exe new file mode 100644 index 0000000..f7cb1e3 Binary files /dev/null and b/-/Scripts/python.exe differ diff --git a/-/Scripts/pythonw.exe b/-/Scripts/pythonw.exe new file mode 100644 index 0000000..4fc3f90 Binary files /dev/null and b/-/Scripts/pythonw.exe differ diff --git a/-/Scripts/pywin32_postinstall.py b/-/Scripts/pywin32_postinstall.py new file mode 100644 index 0000000..a9dd856 --- /dev/null +++ b/-/Scripts/pywin32_postinstall.py @@ -0,0 +1,778 @@ +# postinstall script for pywin32 +# +# copies pywintypesXX.dll and pythoncomXX.dll into the system directory, +# and creates a pth file +import argparse +import glob +import os +import shutil +import sys +import sysconfig +import tempfile # Send output somewhere so it can be found if necessary... +import winreg + +tee_f = open(os.path.join(tempfile.gettempdir(), "pywin32_postinstall.log"), "w") + + +class Tee: + def __init__(self, file): + self.f = file + + def write(self, what): + if self.f is not None: + try: + self.f.write(what.replace("\n", "\r\n")) + except OSError: + pass + tee_f.write(what) + + def flush(self): + if self.f is not None: + try: + self.f.flush() + except OSError: + pass + tee_f.flush() + + +# For some unknown reason, when running under bdist_wininst we will start up +# with sys.stdout as None but stderr is hooked up. This work-around allows +# bdist_wininst to see the output we write and display it at the end of +# the install. +if sys.stdout is None: # pyright: ignore[reportUnnecessaryComparison] + sys.stdout = sys.stderr + +sys.stderr = Tee(sys.stderr) +sys.stdout = Tee(sys.stdout) + +com_modules = [ + # module_name, class_names + ("win32com.servers.interp", "Interpreter"), + ("win32com.servers.dictionary", "DictionaryPolicy"), + ("win32com.axscript.client.pyscript", "PyScript"), +] + +# Is this a 'silent' install - ie, avoid all dialogs. +# Different than 'verbose' +silent = 0 + +# Verbosity of output messages. +verbose = 1 + +root_key_name = "Software\\Python\\PythonCore\\" + sys.winver + +try: + # When this script is run from inside the bdist_wininst installer, + # file_created() and directory_created() are additional builtin + # functions which write lines to PythonXX\pywin32-install.log. This is + # a list of actions for the uninstaller, the format is inspired by what + # the Wise installer also creates. + file_created # type: ignore[used-before-def] + # 3.10 stopped supporting bdist_wininst, but we can still build them with 3.9. + # This can be kept until Python 3.9 or exe installers support is dropped. + is_bdist_wininst = True +except NameError: + is_bdist_wininst = False # we know what it is not - but not what it is :) + + def file_created(file): + pass + + def directory_created(directory): + pass + + def get_root_hkey(): + try: + winreg.OpenKey( + winreg.HKEY_LOCAL_MACHINE, root_key_name, 0, winreg.KEY_CREATE_SUB_KEY + ) + return winreg.HKEY_LOCAL_MACHINE + except OSError: + # Either not exist, or no permissions to create subkey means + # must be HKCU + return winreg.HKEY_CURRENT_USER + + +try: + create_shortcut # type: ignore[used-before-def] +except NameError: + # Create a function with the same signature as create_shortcut provided + # by bdist_wininst + def create_shortcut( + path, description, filename, arguments="", workdir="", iconpath="", iconindex=0 + ): + import pythoncom + from win32com.shell import shell + + ilink = pythoncom.CoCreateInstance( + shell.CLSID_ShellLink, + None, + pythoncom.CLSCTX_INPROC_SERVER, + shell.IID_IShellLink, + ) + ilink.SetPath(path) + ilink.SetDescription(description) + if arguments: + ilink.SetArguments(arguments) + if workdir: + ilink.SetWorkingDirectory(workdir) + if iconpath or iconindex: + ilink.SetIconLocation(iconpath, iconindex) + # now save it. + ipf = ilink.QueryInterface(pythoncom.IID_IPersistFile) + ipf.Save(filename, 0) + + # Support the same list of "path names" as bdist_wininst. + def get_special_folder_path(path_name): + from win32com.shell import shell, shellcon + + for maybe in """ + CSIDL_COMMON_STARTMENU CSIDL_STARTMENU CSIDL_COMMON_APPDATA + CSIDL_LOCAL_APPDATA CSIDL_APPDATA CSIDL_COMMON_DESKTOPDIRECTORY + CSIDL_DESKTOPDIRECTORY CSIDL_COMMON_STARTUP CSIDL_STARTUP + CSIDL_COMMON_PROGRAMS CSIDL_PROGRAMS CSIDL_PROGRAM_FILES_COMMON + CSIDL_PROGRAM_FILES CSIDL_FONTS""".split(): + if maybe == path_name: + csidl = getattr(shellcon, maybe) + return shell.SHGetSpecialFolderPath(0, csidl, False) + raise ValueError(f"{path_name} is an unknown path ID") + + +def CopyTo(desc, src, dest): + import win32api + import win32con + + while 1: + try: + win32api.CopyFile(src, dest, 0) + return + except win32api.error as details: + if details.winerror == 5: # access denied - user not admin. + raise + if silent: + # Running silent mode - just re-raise the error. + raise + full_desc = ( + f"Error {desc}\n\n" + "If you have any Python applications running, " + f"please close them now\nand select 'Retry'\n\n{details.strerror}" + ) + rc = win32api.MessageBox( + 0, full_desc, "Installation Error", win32con.MB_ABORTRETRYIGNORE + ) + if rc == win32con.IDABORT: + raise + elif rc == win32con.IDIGNORE: + return + # else retry - around we go again. + + +# We need to import win32api to determine the Windows system directory, +# so we can copy our system files there - but importing win32api will +# load the pywintypes.dll already in the system directory preventing us +# from updating them! +# So, we pull the same trick pywintypes.py does, but it loads from +# our pywintypes_system32 directory. +def LoadSystemModule(lib_dir, modname): + # See if this is a debug build. + import importlib.machinery + import importlib.util + + suffix = "_d" if "_d.pyd" in importlib.machinery.EXTENSION_SUFFIXES else "" + filename = "%s%d%d%s.dll" % ( + modname, + sys.version_info.major, + sys.version_info.minor, + suffix, + ) + filename = os.path.join(lib_dir, "pywin32_system32", filename) + loader = importlib.machinery.ExtensionFileLoader(modname, filename) + spec = importlib.machinery.ModuleSpec(name=modname, loader=loader, origin=filename) + mod = importlib.util.module_from_spec(spec) + loader.exec_module(mod) + + +def SetPyKeyVal(key_name, value_name, value): + root_hkey = get_root_hkey() + root_key = winreg.OpenKey(root_hkey, root_key_name) + try: + my_key = winreg.CreateKey(root_key, key_name) + try: + winreg.SetValueEx(my_key, value_name, 0, winreg.REG_SZ, value) + if verbose: + print(f"-> {root_key_name}\\{key_name}[{value_name}]={value!r}") + finally: + my_key.Close() + finally: + root_key.Close() + + +def UnsetPyKeyVal(key_name, value_name, delete_key=False): + root_hkey = get_root_hkey() + root_key = winreg.OpenKey(root_hkey, root_key_name) + try: + my_key = winreg.OpenKey(root_key, key_name, 0, winreg.KEY_SET_VALUE) + try: + winreg.DeleteValue(my_key, value_name) + if verbose: + print(f"-> DELETE {root_key_name}\\{key_name}[{value_name}]") + finally: + my_key.Close() + if delete_key: + winreg.DeleteKey(root_key, key_name) + if verbose: + print(f"-> DELETE {root_key_name}\\{key_name}") + except OSError as why: + winerror = getattr(why, "winerror", why.errno) + if winerror != 2: # file not found + raise + finally: + root_key.Close() + + +def RegisterCOMObjects(register=True): + import win32com.server.register + + if register: + func = win32com.server.register.RegisterClasses + else: + func = win32com.server.register.UnregisterClasses + flags = {} + if not verbose: + flags["quiet"] = 1 + for module, klass_name in com_modules: + __import__(module) + mod = sys.modules[module] + flags["finalize_register"] = getattr(mod, "DllRegisterServer", None) + flags["finalize_unregister"] = getattr(mod, "DllUnregisterServer", None) + klass = getattr(mod, klass_name) + func(klass, **flags) + + +def RegisterHelpFile(register=True, lib_dir=None): + if lib_dir is None: + lib_dir = sysconfig.get_paths()["platlib"] + if register: + # Register the .chm help file. + chm_file = os.path.join(lib_dir, "PyWin32.chm") + if os.path.isfile(chm_file): + # This isn't recursive, so if 'Help' doesn't exist, we croak + SetPyKeyVal("Help", None, None) + SetPyKeyVal("Help\\Pythonwin Reference", None, chm_file) + return chm_file + else: + print("NOTE: PyWin32.chm can not be located, so has not been registered") + else: + UnsetPyKeyVal("Help\\Pythonwin Reference", None, delete_key=True) + return None + + +def RegisterPythonwin(register=True, lib_dir=None): + """Add (or remove) Pythonwin to context menu for python scripts. + ??? Should probably also add Edit command for pys files also. + Also need to remove these keys on uninstall, but there's no function + like file_created to add registry entries to uninstall log ??? + """ + import os + + if lib_dir is None: + lib_dir = sysconfig.get_paths()["platlib"] + classes_root = get_root_hkey() + ## Installer executable doesn't seem to pass anything to postinstall script indicating if it's a debug build, + pythonwin_exe = os.path.join(lib_dir, "Pythonwin", "Pythonwin.exe") + pythonwin_edit_command = pythonwin_exe + ' -edit "%1"' + + keys_vals = [ + ( + "Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Pythonwin.exe", + "", + pythonwin_exe, + ), + ( + "Software\\Classes\\Python.File\\shell\\Edit with Pythonwin", + "command", + pythonwin_edit_command, + ), + ( + "Software\\Classes\\Python.NoConFile\\shell\\Edit with Pythonwin", + "command", + pythonwin_edit_command, + ), + ] + + try: + if register: + for key, sub_key, val in keys_vals: + ## Since winreg only uses the character Api functions, this can fail if Python + ## is installed to a path containing non-ascii characters + hkey = winreg.CreateKey(classes_root, key) + if sub_key: + hkey = winreg.CreateKey(hkey, sub_key) + winreg.SetValueEx(hkey, None, 0, winreg.REG_SZ, val) + hkey.Close() + else: + for key, sub_key, val in keys_vals: + try: + if sub_key: + hkey = winreg.OpenKey(classes_root, key) + winreg.DeleteKey(hkey, sub_key) + hkey.Close() + winreg.DeleteKey(classes_root, key) + except OSError as why: + winerror = getattr(why, "winerror", why.errno) + if winerror != 2: # file not found + raise + finally: + # tell windows about the change + from win32com.shell import shell, shellcon + + shell.SHChangeNotify( + shellcon.SHCNE_ASSOCCHANGED, shellcon.SHCNF_IDLIST, None, None + ) + + +def get_shortcuts_folder(): + if get_root_hkey() == winreg.HKEY_LOCAL_MACHINE: + try: + fldr = get_special_folder_path("CSIDL_COMMON_PROGRAMS") + except OSError: + # No CSIDL_COMMON_PROGRAMS on this platform + fldr = get_special_folder_path("CSIDL_PROGRAMS") + else: + # non-admin install - always goes in this user's start menu. + fldr = get_special_folder_path("CSIDL_PROGRAMS") + + try: + install_group = winreg.QueryValue( + get_root_hkey(), root_key_name + "\\InstallPath\\InstallGroup" + ) + except OSError: + install_group = "Python %d.%d" % ( + sys.version_info.major, + sys.version_info.minor, + ) + return os.path.join(fldr, install_group) + + +# Get the system directory, which may be the Wow64 directory if we are a 32bit +# python on a 64bit OS. +def get_system_dir(): + import win32api # we assume this exists. + + try: + import pythoncom + import win32process + from win32com.shell import shell, shellcon + + try: + if win32process.IsWow64Process(): + return shell.SHGetSpecialFolderPath(0, shellcon.CSIDL_SYSTEMX86) + return shell.SHGetSpecialFolderPath(0, shellcon.CSIDL_SYSTEM) + except (pythoncom.com_error, win32process.error): + return win32api.GetSystemDirectory() + except ImportError: + return win32api.GetSystemDirectory() + + +def fixup_dbi(): + # We used to have a dbi.pyd with our .pyd files, but now have a .py file. + # If the user didn't uninstall, they will find the .pyd which will cause + # problems - so handle that. + import win32api + import win32con + + pyd_name = os.path.join(os.path.dirname(win32api.__file__), "dbi.pyd") + pyd_d_name = os.path.join(os.path.dirname(win32api.__file__), "dbi_d.pyd") + py_name = os.path.join(os.path.dirname(win32con.__file__), "dbi.py") + for this_pyd in (pyd_name, pyd_d_name): + this_dest = this_pyd + ".old" + if os.path.isfile(this_pyd) and os.path.isfile(py_name): + try: + if os.path.isfile(this_dest): + print( + f"Old dbi '{this_dest}' already exists - deleting '{this_pyd}'" + ) + os.remove(this_pyd) + else: + os.rename(this_pyd, this_dest) + print(f"renamed '{this_pyd}'->'{this_pyd}.old'") + file_created(this_pyd + ".old") + except OSError as exc: + print(f"FAILED to rename '{this_pyd}': {exc}") + + +def install(lib_dir): + import traceback + + # The .pth file is now installed as a regular file. + # Create the .pth file in the site-packages dir, and use only relative paths + # We used to write a .pth directly to sys.prefix - clobber it. + if os.path.isfile(os.path.join(sys.prefix, "pywin32.pth")): + os.unlink(os.path.join(sys.prefix, "pywin32.pth")) + # The .pth may be new and therefore not loaded in this session. + # Setup the paths just in case. + for name in "win32 win32\\lib Pythonwin".split(): + sys.path.append(os.path.join(lib_dir, name)) + # It is possible people with old versions installed with still have + # pywintypes and pythoncom registered. We no longer need this, and stale + # entries hurt us. + for name in "pythoncom pywintypes".split(): + keyname = "Software\\Python\\PythonCore\\" + sys.winver + "\\Modules\\" + name + for root in winreg.HKEY_LOCAL_MACHINE, winreg.HKEY_CURRENT_USER: + try: + winreg.DeleteKey(root, keyname + "\\Debug") + except OSError: + pass + try: + winreg.DeleteKey(root, keyname) + except OSError: + pass + LoadSystemModule(lib_dir, "pywintypes") + LoadSystemModule(lib_dir, "pythoncom") + import win32api + + # and now we can get the system directory: + files = glob.glob(os.path.join(lib_dir, "pywin32_system32\\*.*")) + if not files: + raise RuntimeError("No system files to copy!!") + # Try the system32 directory first - if that fails due to "access denied", + # it implies a non-admin user, and we use sys.prefix + for dest_dir in [get_system_dir(), sys.prefix]: + # and copy some files over there + worked = 0 + try: + for fname in files: + base = os.path.basename(fname) + dst = os.path.join(dest_dir, base) + CopyTo("installing %s" % base, fname, dst) + if verbose: + print(f"Copied {base} to {dst}") + # Register the files with the uninstaller + file_created(dst) + worked = 1 + # Nuke any other versions that may exist - having + # duplicates causes major headaches. + bad_dest_dirs = [ + os.path.join(sys.prefix, "Library\\bin"), + os.path.join(sys.prefix, "Lib\\site-packages\\win32"), + ] + if dest_dir != sys.prefix: + bad_dest_dirs.append(sys.prefix) + for bad_dest_dir in bad_dest_dirs: + bad_fname = os.path.join(bad_dest_dir, base) + if os.path.exists(bad_fname): + # let exceptions go here - delete must succeed + os.unlink(bad_fname) + if worked: + break + except win32api.error as details: + if details.winerror == 5: + # access denied - user not admin - try sys.prefix dir, + # but first check that a version doesn't already exist + # in that place - otherwise that one will still get used! + if os.path.exists(dst): + msg = ( + "The file '%s' exists, but can not be replaced " + "due to insufficient permissions. You must " + "reinstall this software as an Administrator" % dst + ) + print(msg) + raise RuntimeError(msg) + continue + raise + else: + raise RuntimeError( + "You don't have enough permissions to install the system files" + ) + + # Pythonwin 'compiles' config files - record them for uninstall. + pywin_dir = os.path.join(lib_dir, "Pythonwin", "pywin") + for fname in glob.glob(os.path.join(pywin_dir, "*.cfg")): + file_created(fname[:-1] + "c") # .cfg->.cfc + + # Register our demo COM objects. + try: + try: + RegisterCOMObjects() + except win32api.error as details: + if details.winerror != 5: # ERROR_ACCESS_DENIED + raise + print("You do not have the permissions to install COM objects.") + print("The sample COM objects were not registered.") + except Exception: + print("FAILED to register the Python COM objects") + traceback.print_exc() + + # There may be no main Python key in HKCU if, eg, an admin installed + # python itself. + winreg.CreateKey(get_root_hkey(), root_key_name) + + chm_file = None + try: + chm_file = RegisterHelpFile(True, lib_dir) + except Exception: + print("Failed to register help file") + traceback.print_exc() + else: + if verbose: + print("Registered help file") + + # misc other fixups. + fixup_dbi() + + # Register Pythonwin in context menu + try: + RegisterPythonwin(True, lib_dir) + except Exception: + print("Failed to register pythonwin as editor") + traceback.print_exc() + else: + if verbose: + print("Pythonwin has been registered in context menu") + + # Create the win32com\gen_py directory. + make_dir = os.path.join(lib_dir, "win32com", "gen_py") + if not os.path.isdir(make_dir): + if verbose: + print(f"Creating directory {make_dir}") + directory_created(make_dir) + os.mkdir(make_dir) + + try: + # create shortcuts + # CSIDL_COMMON_PROGRAMS only available works on NT/2000/XP, and + # will fail there if the user has no admin rights. + fldr = get_shortcuts_folder() + # If the group doesn't exist, then we don't make shortcuts - its + # possible that this isn't a "normal" install. + if os.path.isdir(fldr): + dst = os.path.join(fldr, "PythonWin.lnk") + create_shortcut( + os.path.join(lib_dir, "Pythonwin\\Pythonwin.exe"), + "The Pythonwin IDE", + dst, + "", + sys.prefix, + ) + file_created(dst) + if verbose: + print("Shortcut for Pythonwin created") + # And the docs. + if chm_file: + dst = os.path.join(fldr, "Python for Windows Documentation.lnk") + doc = "Documentation for the PyWin32 extensions" + create_shortcut(chm_file, doc, dst) + file_created(dst) + if verbose: + print("Shortcut to documentation created") + else: + if verbose: + print(f"Can't install shortcuts - {fldr!r} is not a folder") + except Exception as details: + print(details) + + # importing win32com.client ensures the gen_py dir created - not strictly + # necessary to do now, but this makes the installation "complete" + try: + import win32com.client # noqa + except ImportError: + # Don't let this error sound fatal + pass + print("The pywin32 extensions were successfully installed.") + + if is_bdist_wininst: + # Open a web page with info about the .exe installers being deprecated. + import webbrowser + + try: + webbrowser.open("https://mhammond.github.io/pywin32_installers.html") + except webbrowser.Error: + print("Please visit https://mhammond.github.io/pywin32_installers.html") + + +def uninstall(lib_dir): + # First ensure our system modules are loaded from pywin32_system, so + # we can remove the ones we copied... + LoadSystemModule(lib_dir, "pywintypes") + LoadSystemModule(lib_dir, "pythoncom") + + try: + RegisterCOMObjects(False) + except Exception as why: + print(f"Failed to unregister COM objects: {why}") + + try: + RegisterHelpFile(False, lib_dir) + except Exception as why: + print(f"Failed to unregister help file: {why}") + else: + if verbose: + print("Unregistered help file") + + try: + RegisterPythonwin(False, lib_dir) + except Exception as why: + print(f"Failed to unregister Pythonwin: {why}") + else: + if verbose: + print("Unregistered Pythonwin") + + try: + # remove gen_py directory. + gen_dir = os.path.join(lib_dir, "win32com", "gen_py") + if os.path.isdir(gen_dir): + shutil.rmtree(gen_dir) + if verbose: + print(f"Removed directory {gen_dir}") + + # Remove pythonwin compiled "config" files. + pywin_dir = os.path.join(lib_dir, "Pythonwin", "pywin") + for fname in glob.glob(os.path.join(pywin_dir, "*.cfc")): + os.remove(fname) + + # The dbi.pyd.old files we may have created. + try: + os.remove(os.path.join(lib_dir, "win32", "dbi.pyd.old")) + except OSError: + pass + try: + os.remove(os.path.join(lib_dir, "win32", "dbi_d.pyd.old")) + except OSError: + pass + + except Exception as why: + print(f"Failed to remove misc files: {why}") + + try: + fldr = get_shortcuts_folder() + for link in ("PythonWin.lnk", "Python for Windows Documentation.lnk"): + fqlink = os.path.join(fldr, link) + if os.path.isfile(fqlink): + os.remove(fqlink) + if verbose: + print(f"Removed {link}") + except Exception as why: + print(f"Failed to remove shortcuts: {why}") + # Now remove the system32 files. + files = glob.glob(os.path.join(lib_dir, "pywin32_system32\\*.*")) + # Try the system32 directory first - if that fails due to "access denied", + # it implies a non-admin user, and we use sys.prefix + try: + for dest_dir in [get_system_dir(), sys.prefix]: + # and copy some files over there + worked = 0 + for fname in files: + base = os.path.basename(fname) + dst = os.path.join(dest_dir, base) + if os.path.isfile(dst): + try: + os.remove(dst) + worked = 1 + if verbose: + print("Removed file %s" % (dst)) + except Exception: + print(f"FAILED to remove {dst}") + if worked: + break + except Exception as why: + print(f"FAILED to remove system files: {why}") + + +# NOTE: If this script is run from inside the bdist_wininst created +# binary installer or uninstaller, the command line args are either +# '-install' or '-remove'. + +# Important: From inside the binary installer this script MUST NOT +# call sys.exit() or raise SystemExit, otherwise not only this script +# but also the installer will terminate! (Is there a way to prevent +# this from the bdist_wininst C code?) + + +def verify_destination(location): + if not os.path.isdir(location): + raise argparse.ArgumentTypeError(f'Path "{location}" does not exist!') + return location + + +def main(): + parser = argparse.ArgumentParser( + formatter_class=argparse.RawDescriptionHelpFormatter, + description="""A post-install script for the pywin32 extensions. + + * Typical usage: + + > python pywin32_postinstall.py -install + + If you installed pywin32 via a .exe installer, this should be run + automatically after installation, but if it fails you can run it again. + + If you installed pywin32 via PIP, you almost certainly need to run this to + setup the environment correctly. + + Execute with script with a '-install' parameter, to ensure the environment + is setup correctly. + """, + ) + parser.add_argument( + "-install", + default=False, + action="store_true", + help="Configure the Python environment correctly for pywin32.", + ) + parser.add_argument( + "-remove", + default=False, + action="store_true", + help="Try and remove everything that was installed or copied.", + ) + parser.add_argument( + "-wait", + type=int, + help="Wait for the specified process to terminate before starting.", + ) + parser.add_argument( + "-silent", + default=False, + action="store_true", + help='Don\'t display the "Abort/Retry/Ignore" dialog for files in use.', + ) + parser.add_argument( + "-quiet", + default=False, + action="store_true", + help="Don't display progress messages.", + ) + parser.add_argument( + "-destination", + default=sysconfig.get_paths()["platlib"], + type=verify_destination, + help="Location of the PyWin32 installation", + ) + + args = parser.parse_args() + + if not args.quiet: + print(f"Parsed arguments are: {args}") + + if not args.install ^ args.remove: + parser.error("You need to either choose to -install or -remove!") + + if args.wait is not None: + try: + os.waitpid(args.wait, 0) + except OSError: + # child already dead + pass + + silent = args.silent + verbose = not args.quiet + + if args.install: + install(args.destination) + + if args.remove: + if not is_bdist_wininst: + uninstall(args.destination) + + +if __name__ == "__main__": + main() diff --git a/-/Scripts/pywin32_testall.py b/-/Scripts/pywin32_testall.py new file mode 100644 index 0000000..2aa9209 --- /dev/null +++ b/-/Scripts/pywin32_testall.py @@ -0,0 +1,125 @@ +"""A test runner for pywin32""" + +import os +import site +import subprocess +import sys + +# locate the dirs based on where this script is - it may be either in the +# source tree, or in an installed Python 'Scripts' tree. +this_dir = os.path.dirname(__file__) +site_packages = [ + site.getusersitepackages(), +] + site.getsitepackages() + +failures = [] + + +# Run a test using subprocess and wait for the result. +# If we get an returncode != 0, we know that there was an error, but we don't +# abort immediately - we run as many tests as we can. +def run_test(script, cmdline_extras): + dirname, scriptname = os.path.split(script) + # some tests prefer to be run from their directory. + cmd = [sys.executable, "-u", scriptname] + cmdline_extras + print("--- Running '%s' ---" % script) + sys.stdout.flush() + result = subprocess.run(cmd, check=False, cwd=dirname) + print(f"*** Test script '{script}' exited with {result.returncode}") + sys.stdout.flush() + if result.returncode: + failures.append(script) + + +def find_and_run(possible_locations, extras): + for maybe in possible_locations: + if os.path.isfile(maybe): + run_test(maybe, extras) + break + else: + raise RuntimeError( + "Failed to locate a test script in one of %s" % possible_locations + ) + + +def main(): + import argparse + + code_directories = [this_dir] + site_packages + + parser = argparse.ArgumentParser( + description="A script to trigger tests in all subprojects of PyWin32." + ) + parser.add_argument( + "-no-user-interaction", + default=False, + action="store_true", + help="(This is now the default - use `-user-interaction` to include them)", + ) + + parser.add_argument( + "-user-interaction", + action="store_true", + help="Include tests which require user interaction", + ) + + parser.add_argument( + "-skip-adodbapi", + default=False, + action="store_true", + help="Skip the adodbapi tests; useful for CI where there's no provider", + ) + + args, remains = parser.parse_known_args() + + # win32, win32ui / Pythonwin + + extras = [] + if args.user_interaction: + extras.append("-user-interaction") + extras.extend(remains) + scripts = [ + "win32/test/testall.py", + "Pythonwin/pywin/test/all.py", + ] + for script in scripts: + maybes = [os.path.join(directory, script) for directory in code_directories] + find_and_run(maybes, extras) + + # win32com + maybes = [ + os.path.join(directory, "win32com", "test", "testall.py") + for directory in [ + os.path.join(this_dir, "com"), + ] + + site_packages + ] + extras = remains + ["1"] # only run "level 1" tests in CI + find_and_run(maybes, extras) + + # adodbapi + if not args.skip_adodbapi: + maybes = [ + os.path.join(directory, "adodbapi", "test", "adodbapitest.py") + for directory in code_directories + ] + find_and_run(maybes, remains) + # This script has a hard-coded sql server name in it, (and markh typically + # doesn't have a different server to test on) but there is now supposed to be a server out there on the Internet + # just to run these tests, so try it... + maybes = [ + os.path.join(directory, "adodbapi", "test", "test_adodbapi_dbapi20.py") + for directory in code_directories + ] + find_and_run(maybes, remains) + + if failures: + print("The following scripts failed") + for failure in failures: + print(">", failure) + sys.exit(1) + print("All tests passed \\o/") + + +if __name__ == "__main__": + main() diff --git a/-/pyvenv.cfg b/-/pyvenv.cfg new file mode 100644 index 0000000..57dd125 --- /dev/null +++ b/-/pyvenv.cfg @@ -0,0 +1,5 @@ +home = C:\Users\zuiderwi\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0 +include-system-site-packages = false +version = 3.11.9 +executable = C:\Users\zuiderwi\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\python.exe +command = C:\Users\zuiderwi\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\python.exe -m venv C:\Users\zuiderwi\OneDrive - Stichting Deltares\Repositories\Software&Scoping\- diff --git a/-/share/jupyter/kernels/python3/kernel.json b/-/share/jupyter/kernels/python3/kernel.json new file mode 100644 index 0000000..cca38a4 --- /dev/null +++ b/-/share/jupyter/kernels/python3/kernel.json @@ -0,0 +1,14 @@ +{ + "argv": [ + "python", + "-m", + "ipykernel_launcher", + "-f", + "{connection_file}" + ], + "display_name": "Python 3 (ipykernel)", + "language": "python", + "metadata": { + "debugger": true + } +} \ No newline at end of file diff --git a/-/share/jupyter/kernels/python3/logo-32x32.png b/-/share/jupyter/kernels/python3/logo-32x32.png new file mode 100644 index 0000000..be81330 Binary files /dev/null and b/-/share/jupyter/kernels/python3/logo-32x32.png differ diff --git a/-/share/jupyter/kernels/python3/logo-64x64.png b/-/share/jupyter/kernels/python3/logo-64x64.png new file mode 100644 index 0000000..eebbff6 Binary files /dev/null and b/-/share/jupyter/kernels/python3/logo-64x64.png differ diff --git a/-/share/jupyter/kernels/python3/logo-svg.svg b/-/share/jupyter/kernels/python3/logo-svg.svg new file mode 100644 index 0000000..467b07b --- /dev/null +++ b/-/share/jupyter/kernels/python3/logo-svg.svg @@ -0,0 +1,265 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/-/share/man/man1/ipython.1 b/-/share/man/man1/ipython.1 new file mode 100644 index 0000000..0f4a191 --- /dev/null +++ b/-/share/man/man1/ipython.1 @@ -0,0 +1,60 @@ +.\" Hey, EMACS: -*- nroff -*- +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.TH IPYTHON 1 "July 15, 2011" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) and groff_man(7) +.\" .SH section heading +.\" .SS secondary section heading +.\" +.\" +.\" To preview this page as plain text: nroff -man ipython.1 +.\" +.SH NAME +ipython \- Tools for Interactive Computing in Python. +.SH SYNOPSIS +.B ipython +.RI [ options ] " files" ... + +.B ipython subcommand +.RI [ options ] ... + +.SH DESCRIPTION +An interactive Python shell with automatic history (input and output), dynamic +object introspection, easier configuration, command completion, access to the +system shell, integration with numerical and scientific computing tools, +web notebook, Qt console, and more. + +For more information on how to use IPython, see 'ipython \-\-help', +or 'ipython \-\-help\-all' for all available command\(hyline options. + +.SH "ENVIRONMENT VARIABLES" +.sp +.PP +\fIIPYTHONDIR\fR +.RS 4 +This is the location where IPython stores all its configuration files. The default +is $HOME/.ipython if IPYTHONDIR is not defined. + +You can see the computed value of IPYTHONDIR with `ipython locate`. + +.SH FILES + +IPython uses various configuration files stored in profiles within IPYTHONDIR. +To generate the default configuration files and start configuring IPython, +do 'ipython profile create', and edit '*_config.py' files located in +IPYTHONDIR/profile_default. + +.SH AUTHORS +IPython is written by the IPython Development Team . diff --git a/.gitignore b/.gitignore index 85047aa..5d6dc51 100644 --- a/.gitignore +++ b/.gitignore @@ -221,4 +221,21 @@ fabric.properties unit_test_coverage/ test-results.xml -.env.* \ No newline at end of file +.env.* + +docs/source/old/background.rst +docs/source/old/code.rst +docs/source/old/conf.py +docs/source/old/conf_old.py +docs/source/old/examples.rst +docs/source/old/index.rst +docs/source/old/installation.rst +docs/source/old/test.rst +docs/source/old/theory.rst +docs/source/old/usage.rst +docs/source/old/code.rst + +# Ignore Python bytecode files +SPUIS/SPUIS401/py/__pycache__/ +*.pyc +*.pyo \ No newline at end of file diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000..5959cc2 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,18 @@ + +version: "2" + +build: + os: "ubuntu-22.04" + tools: + python: "3.10" + +python: + install: + - requirements: docs/requirements.txt + +sphinx: + configuration: docs/source/conf.py + +formats: + - pdf + - epub diff --git a/.vscode/settings.json b/.vscode/settings.json index 6728f09..5ff4f4a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,7 +3,7 @@ "editor.formatOnSave": true, "editor.defaultFormatter": "ms-python.black-formatter", "editor.codeActionsOnSave": { - "source.organizeImports": true + "source.organizeImports": "explicit" }, }, "python.analysis.typeCheckingMode": "basic", diff --git a/Deltares/Repositories/Scripts/Activate.ps1 b/Deltares/Repositories/Scripts/Activate.ps1 new file mode 100644 index 0000000..dbbf985 --- /dev/null +++ b/Deltares/Repositories/Scripts/Activate.ps1 @@ -0,0 +1,502 @@ +<# +.Synopsis +Activate a Python virtual environment for the current PowerShell session. + +.Description +Pushes the python executable for a virtual environment to the front of the +$Env:PATH environment variable and sets the prompt to signify that you are +in a Python virtual environment. Makes use of the command line switches as +well as the `pyvenv.cfg` file values present in the virtual environment. + +.Parameter VenvDir +Path to the directory that contains the virtual environment to activate. The +default value for this is the parent of the directory that the Activate.ps1 +script is located within. + +.Parameter Prompt +The prompt prefix to display when this virtual environment is activated. By +default, this prompt is the name of the virtual environment folder (VenvDir) +surrounded by parentheses and followed by a single space (ie. '(.venv) '). + +.Example +Activate.ps1 +Activates the Python virtual environment that contains the Activate.ps1 script. + +.Example +Activate.ps1 -Verbose +Activates the Python virtual environment that contains the Activate.ps1 script, +and shows extra information about the activation as it executes. + +.Example +Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv +Activates the Python virtual environment located in the specified location. + +.Example +Activate.ps1 -Prompt "MyPython" +Activates the Python virtual environment that contains the Activate.ps1 script, +and prefixes the current prompt with the specified string (surrounded in +parentheses) while the virtual environment is active. + +.Notes +On Windows, it may be required to enable this Activate.ps1 script by setting the +execution policy for the user. You can do this by issuing the following PowerShell +command: + +PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser + +For more information on Execution Policies: +https://go.microsoft.com/fwlink/?LinkID=135170 + +#> +Param( + [Parameter(Mandatory = $false)] + [String] + $VenvDir, + [Parameter(Mandatory = $false)] + [String] + $Prompt +) + +<# Function declarations --------------------------------------------------- #> + +<# +.Synopsis +Remove all shell session elements added by the Activate script, including the +addition of the virtual environment's Python executable from the beginning of +the PATH variable. + +.Parameter NonDestructive +If present, do not remove this function from the global namespace for the +session. + +#> +function global:deactivate ([switch]$NonDestructive) { + # Revert to original values + + # The prior prompt: + if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { + Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt + Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT + } + + # The prior PYTHONHOME: + if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { + Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME + Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME + } + + # The prior PATH: + if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { + Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH + Remove-Item -Path Env:_OLD_VIRTUAL_PATH + } + + # Just remove the VIRTUAL_ENV altogether: + if (Test-Path -Path Env:VIRTUAL_ENV) { + Remove-Item -Path env:VIRTUAL_ENV + } + + # Just remove VIRTUAL_ENV_PROMPT altogether. + if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { + Remove-Item -Path env:VIRTUAL_ENV_PROMPT + } + + # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: + if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { + Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force + } + + # Leave deactivate function in the global namespace if requested: + if (-not $NonDestructive) { + Remove-Item -Path function:deactivate + } +} + +<# +.Description +Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the +given folder, and returns them in a map. + +For each line in the pyvenv.cfg file, if that line can be parsed into exactly +two strings separated by `=` (with any amount of whitespace surrounding the =) +then it is considered a `key = value` line. The left hand string is the key, +the right hand is the value. + +If the value starts with a `'` or a `"` then the first and last character is +stripped from the value before being captured. + +.Parameter ConfigDir +Path to the directory that contains the `pyvenv.cfg` file. +#> +function Get-PyVenvConfig( + [String] + $ConfigDir +) { + Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" + + # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). + $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue + + # An empty map will be returned if no config file is found. + $pyvenvConfig = @{ } + + if ($pyvenvConfigPath) { + + Write-Verbose "File exists, parse `key = value` lines" + $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath + + $pyvenvConfigContent | ForEach-Object { + $keyval = $PSItem -split "\s*=\s*", 2 + if ($keyval[0] -and $keyval[1]) { + $val = $keyval[1] + + # Remove extraneous quotations around a string value. + if ("'""".Contains($val.Substring(0, 1))) { + $val = $val.Substring(1, $val.Length - 2) + } + + $pyvenvConfig[$keyval[0]] = $val + Write-Verbose "Adding Key: '$($keyval[0])'='$val'" + } + } + } + return $pyvenvConfig +} + + +<# Begin Activate script --------------------------------------------------- #> + +# Determine the containing directory of this script +$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition +$VenvExecDir = Get-Item -Path $VenvExecPath + +Write-Verbose "Activation script is located in path: '$VenvExecPath'" +Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" +Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" + +# Set values required in priority: CmdLine, ConfigFile, Default +# First, get the location of the virtual environment, it might not be +# VenvExecDir if specified on the command line. +if ($VenvDir) { + Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" +} +else { + Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." + $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") + Write-Verbose "VenvDir=$VenvDir" +} + +# Next, read the `pyvenv.cfg` file to determine any required value such +# as `prompt`. +$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir + +# Next, set the prompt from the command line, or the config file, or +# just use the name of the virtual environment folder. +if ($Prompt) { + Write-Verbose "Prompt specified as argument, using '$Prompt'" +} +else { + Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" + if ($pyvenvCfg -and $pyvenvCfg['prompt']) { + Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" + $Prompt = $pyvenvCfg['prompt']; + } + else { + Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" + Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" + $Prompt = Split-Path -Path $venvDir -Leaf + } +} + +Write-Verbose "Prompt = '$Prompt'" +Write-Verbose "VenvDir='$VenvDir'" + +# Deactivate any currently active virtual environment, but leave the +# deactivate function in place. +deactivate -nondestructive + +# Now set the environment variable VIRTUAL_ENV, used by many tools to determine +# that there is an activated venv. +$env:VIRTUAL_ENV = $VenvDir + +if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { + + Write-Verbose "Setting prompt to '$Prompt'" + + # Set the prompt to include the env name + # Make sure _OLD_VIRTUAL_PROMPT is global + function global:_OLD_VIRTUAL_PROMPT { "" } + Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT + New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt + + function global:prompt { + Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " + _OLD_VIRTUAL_PROMPT + } + $env:VIRTUAL_ENV_PROMPT = $Prompt +} + +# Clear PYTHONHOME +if (Test-Path -Path Env:PYTHONHOME) { + Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME + Remove-Item -Path Env:PYTHONHOME +} + +# Add the venv to the PATH +Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH +$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" + +# SIG # Begin signature block +# MIIvIwYJKoZIhvcNAQcCoIIvFDCCLxACAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBnL745ElCYk8vk +# dBtMuQhLeWJ3ZGfzKW4DHCYzAn+QB6CCE8MwggWQMIIDeKADAgECAhAFmxtXno4h +# MuI5B72nd3VcMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0xMzA4MDExMjAwMDBaFw0z +# ODAxMTUxMjAwMDBaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ +# bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0 +# IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +# AL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3EMB/z +# G6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKyunWZ +# anMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsFxl7s +# Wxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU15zHL +# 2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJBMtfb +# BHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObURWBf3 +# JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6nj3c +# AORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxBYKqx +# YxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5SUUd0 +# viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+xq4aL +# T8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjQjBAMA8GA1Ud +# EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTs1+OC0nFdZEzf +# Lmc/57qYrhwPTzANBgkqhkiG9w0BAQwFAAOCAgEAu2HZfalsvhfEkRvDoaIAjeNk +# aA9Wz3eucPn9mkqZucl4XAwMX+TmFClWCzZJXURj4K2clhhmGyMNPXnpbWvWVPjS +# PMFDQK4dUPVS/JA7u5iZaWvHwaeoaKQn3J35J64whbn2Z006Po9ZOSJTROvIXQPK +# 7VB6fWIhCoDIc2bRoAVgX+iltKevqPdtNZx8WorWojiZ83iL9E3SIAveBO6Mm0eB +# cg3AFDLvMFkuruBx8lbkapdvklBtlo1oepqyNhR6BvIkuQkRUNcIsbiJeoQjYUIp +# 5aPNoiBB19GcZNnqJqGLFNdMGbJQQXE9P01wI4YMStyB0swylIQNCAmXHE/A7msg +# dDDS4Dk0EIUhFQEI6FUy3nFJ2SgXUE3mvk3RdazQyvtBuEOlqtPDBURPLDab4vri +# RbgjU2wGb2dVf0a1TD9uKFp5JtKkqGKX0h7i7UqLvBv9R0oN32dmfrJbQdA75PQ7 +# 9ARj6e/CVABRoIoqyc54zNXqhwQYs86vSYiv85KZtrPmYQ/ShQDnUBrkG5WdGaG5 +# nLGbsQAe79APT0JsyQq87kP6OnGlyE0mpTX9iV28hWIdMtKgK1TtmlfB2/oQzxm3 +# i0objwG2J5VT6LaJbVu8aNQj6ItRolb58KaAoNYes7wPD1N1KarqE3fk3oyBIa0H +# EEcRrYc9B9F1vM/zZn4wggawMIIEmKADAgECAhAIrUCyYNKcTJ9ezam9k67ZMA0G +# CSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ +# bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0 +# IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0zNjA0MjgyMzU5NTla +# MGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UE +# AxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcgUlNBNDA5NiBTSEEz +# ODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDVtC9C +# 0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0JAfhS0/TeEP0F9ce +# 2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJrQ5qZ8sU7H/Lvy0da +# E6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhFLqGfLOEYwhrMxe6T +# SXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+FLEikVoQ11vkunKoA +# FdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh3K3kGKDYwSNHR7Oh +# D26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJwZPt4bRc4G/rJvmM +# 1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQayg9Rc9hUZTO1i4F4z +# 8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbIYViY9XwCFjyDKK05 +# huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchApQfDVxW0mdmgRQRNY +# mtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRroOBl8ZhzNeDhFMJlP +# /2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IBWTCCAVUwEgYDVR0T +# AQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHwYD +# VR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMG +# A1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYY +# aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2Fj +# ZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNV +# HR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRU +# cnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAEDMAgGBmeBDAEEATAN +# BgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql+Eg08yy25nRm95Ry +# sQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFFUP2cvbaF4HZ+N3HL +# IvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1hmYFW9snjdufE5Btf +# Q/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3RywYFzzDaju4ImhvTnh +# OE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5UbdldAhQfQDN8A+KVssIh +# dXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw8MzK7/0pNVwfiThV +# 9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnPLqR0kq3bPKSchh/j +# wVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatEQOON8BUozu3xGFYH +# Ki8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bnKD+sEq6lLyJsQfmC +# XBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQjiWQ1tygVQK+pKHJ6l +# /aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbqyK+p/pQd52MbOoZW +# eE4wggd3MIIFX6ADAgECAhAHHxQbizANJfMU6yMM0NHdMA0GCSqGSIb3DQEBCwUA +# MGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UE +# AxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcgUlNBNDA5NiBTSEEz +# ODQgMjAyMSBDQTEwHhcNMjIwMTE3MDAwMDAwWhcNMjUwMTE1MjM1OTU5WjB8MQsw +# CQYDVQQGEwJVUzEPMA0GA1UECBMGT3JlZ29uMRIwEAYDVQQHEwlCZWF2ZXJ0b24x +# IzAhBgNVBAoTGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uMSMwIQYDVQQDExpQ +# eXRob24gU29mdHdhcmUgRm91bmRhdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +# ADCCAgoCggIBAKgc0BTT+iKbtK6f2mr9pNMUTcAJxKdsuOiSYgDFfwhjQy89koM7 +# uP+QV/gwx8MzEt3c9tLJvDccVWQ8H7mVsk/K+X+IufBLCgUi0GGAZUegEAeRlSXx +# xhYScr818ma8EvGIZdiSOhqjYc4KnfgfIS4RLtZSrDFG2tN16yS8skFa3IHyvWdb +# D9PvZ4iYNAS4pjYDRjT/9uzPZ4Pan+53xZIcDgjiTwOh8VGuppxcia6a7xCyKoOA +# GjvCyQsj5223v1/Ig7Dp9mGI+nh1E3IwmyTIIuVHyK6Lqu352diDY+iCMpk9Zanm +# SjmB+GMVs+H/gOiofjjtf6oz0ki3rb7sQ8fTnonIL9dyGTJ0ZFYKeb6BLA66d2GA +# LwxZhLe5WH4Np9HcyXHACkppsE6ynYjTOd7+jN1PRJahN1oERzTzEiV6nCO1M3U1 +# HbPTGyq52IMFSBM2/07WTJSbOeXjvYR7aUxK9/ZkJiacl2iZI7IWe7JKhHohqKuc +# eQNyOzxTakLcRkzynvIrk33R9YVqtB4L6wtFxhUjvDnQg16xot2KVPdfyPAWd81w +# tZADmrUtsZ9qG79x1hBdyOl4vUtVPECuyhCxaw+faVjumapPUnwo8ygflJJ74J+B +# Yxf6UuD7m8yzsfXWkdv52DjL74TxzuFTLHPyARWCSCAbzn3ZIly+qIqDAgMBAAGj +# ggIGMIICAjAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4E +# FgQUt/1Teh2XDuUj2WW3siYWJgkZHA8wDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQM +# MAoGCCsGAQUFBwMDMIG1BgNVHR8Ega0wgaowU6BRoE+GTWh0dHA6Ly9jcmwzLmRp +# Z2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNBNDA5NlNI +# QTM4NDIwMjFDQTEuY3JsMFOgUaBPhk1odHRwOi8vY3JsNC5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZTSEEzODQyMDIxQ0Ex +# LmNybDA+BgNVHSAENzA1MDMGBmeBDAEEATApMCcGCCsGAQUFBwIBFhtodHRwOi8v +# d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUF +# BzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6 +# Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWdu +# aW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZI +# hvcNAQELBQADggIBABxv4AeV/5ltkELHSC63fXAFYS5tadcWTiNc2rskrNLrfH1N +# s0vgSZFoQxYBFKI159E8oQQ1SKbTEubZ/B9kmHPhprHya08+VVzxC88pOEvz68nA +# 82oEM09584aILqYmj8Pj7h/kmZNzuEL7WiwFa/U1hX+XiWfLIJQsAHBla0i7QRF2 +# de8/VSF0XXFa2kBQ6aiTsiLyKPNbaNtbcucaUdn6vVUS5izWOXM95BSkFSKdE45O +# q3FForNJXjBvSCpwcP36WklaHL+aHu1upIhCTUkzTHMh8b86WmjRUqbrnvdyR2yd +# I5l1OqcMBjkpPpIV6wcc+KY/RH2xvVuuoHjlUjwq2bHiNoX+W1scCpnA8YTs2d50 +# jDHUgwUo+ciwpffH0Riq132NFmrH3r67VaN3TuBxjI8SIZM58WEDkbeoriDk3hxU +# 8ZWV7b8AW6oyVBGfM06UgkfMb58h+tJPrFx8VI/WLq1dTqMfZOm5cuclMnUHs2uq +# rRNtnV8UfidPBL4ZHkTcClQbCoz0UbLhkiDvIS00Dn+BBcxw/TKqVL4Oaz3bkMSs +# M46LciTeucHY9ExRVt3zy7i149sd+F4QozPqn7FrSVHXmem3r7bjyHTxOgqxRCVa +# 18Vtx7P/8bYSBeS+WHCKcliFCecspusCDSlnRUjZwyPdP0VHxaZg2unjHY3rMYIa +# tjCCGrICAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIElu +# Yy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJT +# QTQwOTYgU0hBMzg0IDIwMjEgQ0ExAhAHHxQbizANJfMU6yMM0NHdMA0GCWCGSAFl +# AwQCAQUAoIHIMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC +# AQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCBnAZ6P7YvTwq0fbF62 +# o7E75R0LxsW5OtyYiFESQckLhjBcBgorBgEEAYI3AgEMMU4wTKBGgEQAQgB1AGkA +# bAB0ADoAIABSAGUAbABlAGEAcwBlAF8AdgAzAC4AMQAxAC4AOQBfADIAMAAyADQA +# MAA0ADAAMgAuADAAMqECgAAwDQYJKoZIhvcNAQEBBQAEggIAg5wQO5NiKFirm9vr +# 1//X5G4t+z318Uagu8vJT/vTjkMTau86CF+SwP3pqC1H2ZMUyVYmVHae5dswKAMR +# hHY1VJV/0lJI+LdYcaxHI/WYzaFLbDrQI/Mty5cabjveG6geMlcJG4nYZlyQX+fJ +# 1k0ogeIF1owldecXP8t5e10WlHBlWb8IBnIPwMtJVZ2/y8NASxsnSJE7pEe7ijGe +# 5Bv9DXvoltKnMSVYv9u2vn7PeIq+Jm3n3kOGSIYtfdytEd1Fd6spfdcmIhqyzVk0 +# Hslq7Aqd7soT0xdmNa/amzEA4HRHpWGUhzOtcC+EqEIIJk9kTjyVgCiyWaB5gGko +# OAZfsxQn+a916iWwA7RrQ+TzBZq/pleUTLZzJmI3DXFjuJ1NDP6Sdw6KREgx6Yw4 +# q2NnnodKlGZkMDcGYPTM2sA4i6i6FsznWY4d8wE4J261YeUrVfIyTx+Q81W4KXoi +# C0x7Pe9Bjh4oJGM3YiLyhVL56sXZWxAC2C/vD3nvIvra9EpvlMvQh6b0xl0V4TSN +# dJ7T7VttR/WNjau46JIgbGZWCDBTTUAydQNoAZ4KnCrcIZCN6Y0qVokXsYHsVIto +# TsnM2+Ca09wxuOIfCOSKpAmqdJ/w2NwLwp+0gwrO2uzpCfbSbkAd+UQNv0joPyUp +# ywmsQndxqA8TaADp8TfkkpJywJGhghc/MIIXOwYKKwYBBAGCNwMDATGCFyswghcn +# BgkqhkiG9w0BBwKgghcYMIIXFAIBAzEPMA0GCWCGSAFlAwQCAQUAMHcGCyqGSIb3 +# DQEJEAEEoGgEZjBkAgEBBglghkgBhv1sBwEwMTANBglghkgBZQMEAgEFAAQg+Jhe +# IOzOttA8vliuL+r3CiY4EJTzfvPasXkI/vwkoI8CEHZ95Ht1TmSmU8+fM0kIG00Y +# DzIwMjQwNDAyMTIzMjEwWqCCEwkwggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f +# 5WEWMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdp +# Q2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2 +# IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEz +# MjM1OTU5WjBIMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4x +# IDAeBgNVBAMTF0RpZ2lDZXJ0IFRpbWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0B +# AQEFAAOCAg8AMIICCgKCAgEAo1NFhx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6 +# OyqcZ9xiFVjBqZMRp82qsmrdECmKHmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp +# 52n+W8PWKyAcwZeUtKVQgfLPywemMGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF +# 6g1hbJ3+cV7EBpo88MUueQ8bZlLjyNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G4 +# 5lKVtUfXeCk5a+B4WZfjRCtK1ZXO7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7p +# Be6q9iT1HbybHLK3X9/w7nZ9MZllR1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAs +# NJvj3m5kGQc3AZEPHLVRzapMZoOIaGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU +# 6mIIE9NpHnxkTZ0P387RXoyqq1AVybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwK +# WEwAPoVpdceDZNZ1zY8SdlalJPrXxGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFx +# smxxrz64b5bV4RAT/mFHCoz+8LbH1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbR +# yV8IpHCj7ArxES5k4MsiK8rxKBMhSVF+BmbTO77665E42FEHypS34lCh8zrTioPL +# QHsCAwEAAaOCAYswggGHMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYG +# A1UdJQEB/wQMMAoGCCsGAQUFBwMIMCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCG +# SAGG/WwHATAfBgNVHSMEGDAWgBS6FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4E +# FgQUpbbvE+fvzdBkodVWqWUxo97V40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDov +# L2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1 +# NlRpbWVTdGFtcGluZ0NBLmNybDCBkAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUH +# MAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDov +# L2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNI +# QTI1NlRpbWVTdGFtcGluZ0NBLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCp +# tZgXvHCNT4o8aJzYJf/LLOTN6l0ikuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX +# 4WCcK+3tPUiOuGu6fF29wmE3aEl3o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoF +# eoQpmLZXeY/bJlYrsPOnvTcM2Jh2T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+nji +# kxp2oml101DkRBK+IA2eqUTQ+OVJdwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBB +# Jt3eWpdPM43UjXd9dUWhpVgmagNF3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJ +# A+rUkTfvTVLzyWAhxFZH7doRS4wyw4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcs +# QdCaM0qoNtS5cpZ+l3k4SF/Kwtw9Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE +# 5jreODsHXjlY9HxzMVWggBHLFAx+rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS +# 2Dq4sUaGa7oX/cR3bBVsrquvczroSUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3 +# CtQC4Fxguyj/OOVSWtasFyIjTvTs0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUb +# c7aZ+WssBkbvQR7w8F/g29mtkIBEr4AQQYowggauMIIElqADAgECAhAHNje3JFR8 +# 2Ees/ShmKl5bMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0z +# NzAzMjIyMzU5NTlaMGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1 +# NiBUaW1lU3RhbXBpbmcgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +# AQDGhjUGSbPBPXJJUVXHJQPE8pE3qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI +# 82j6ffOciQt/nR+eDzMfUBMLJnOWbfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9 +# xBd/qxkrPkLcZ47qUT3w1lbU5ygt69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ +# 3HxqV3rwN3mfXazL6IRktFLydkf3YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5Emfv +# DqVjbOSmxR3NNg1c1eYbqMFkdECnwHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDET +# qVcplicu9Yemj052FVUmcJgmf6AaRyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHe +# IhTZgirHkr+g3uM+onP65x9abJTyUpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jo +# n7ZGs506o9UD4L/wojzKQtwYSH8UNM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ +# 9FHzNklNiyDSLFc1eSuo80VgvCONWPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/T +# Xkt2ElGTyYwMO1uKIqjBJgj5FBASA31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJg +# o1gJASgADoRU7s7pXcheMBK9Rp6103a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkw +# EgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+e +# yG8wHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQD +# AgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEF +# BQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRw +# Oi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# dDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkUm9vdEc0LmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglg +# hkgBhv1sBwEwDQYJKoZIhvcNAQELBQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGw +# GC4QTRPPMFPOvxj7x1Bd4ksp+3CKDaopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0 +# MWfNthKWb8RQTGIdDAiCqBa9qVbPFXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1D +# X+1gtqpPkWaeLJ7giqzl/Yy8ZCaHbJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw +# 1YpxdmXazPByoyP6wCeCRK6ZJxurJB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY +# +/umnXKvxMfBwWpx2cYTgAnEtp/Nh4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0I +# SQ+UzTl63f8lY5knLD0/a6fxZsNBzU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr +# 5Dhzq6YBT70/O3itTK37xJV77QpfMzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7y +# Rp11LB4nLCbbbxV7HhmLNriT1ObyF5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDop +# hrCYoCvtlUG3OtUVmDG0YgkPCr2B2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/ +# AAvkdgIm2fBldkKmKYcJRyvmfxqkhQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMO +# Hds3OBqhK/bt1nz8MIIFjTCCBHWgAwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkq +# hkiG9w0BAQwFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5j +# MRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBB +# c3N1cmVkIElEIFJvb3QgQ0EwHhcNMjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5 +# WjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +# ExB3d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJv +# b3QgRzQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1K +# PDAiMGkz7MKnJS7JIT3yithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2r +# snnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C +# 8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBf +# sXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY +# QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8 +# rhsDdV14Ztk6MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaY +# dj1ZXUJ2h4mXaXpI8OCiEhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+ +# wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw +# ++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+N +# P8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7F +# wI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUw +# AwEB/zAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAU +# Reuir/SSy4IxLVGLp6chnfNtyA8wDgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEB +# BG0wazAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsG +# AQUFBzAChjdodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1 +# cmVkSURSb290Q0EuY3J0MEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRp +# Z2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAow +# CDAGBgRVHSAAMA0GCSqGSIb3DQEBDAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/ +# Vwe9mqyhhyzshV6pGrsi+IcaaVQi7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLe +# JLxSA8hO0Cre+i1Wz/n096wwepqLsl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE +# 1Od/6Fmo8L8vC6bp8jQ87PcDx4eo0kxAGTVGamlUsLihVo7spNU96LHc/RzY9Hda +# XFSMb++hUD38dglohJ9vytsgjTVgHAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbO +# byMt9H5xaiNrIv8SuFQtJ37YOtnwtoeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYID +# djCCA3ICAQEwdzBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIElu +# Yy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYg +# VGltZVN0YW1waW5nIENBAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUA +# oIHRMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcN +# MjQwNDAyMTIzMjEwWjArBgsqhkiG9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4Jd +# zqqKycZPGZzPQDAvBgkqhkiG9w0BCQQxIgQg58bvIvjFkyBb2O0xwLgtU8RJLcMV +# kvIdXiq3TCLuhq4wNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBX +# aEE2b4KK2lWarjMWr00amtQMeCgwDQYJKoZIhvcNAQEBBQAEggIAhU3imuIvql4+ +# IqPz0Anf0ZIB5hbafNTx1WEVhPEG9iJr24gpjbWvepQrbWJf0FBj8wY9GeRab6iv +# 79MMxZkPpR/DMK1qFr1vIlw67JhpqqNkaNIa5G3pAHDYdHYcB+Utw1p5XPOBRu0A +# f4wQ5fwWugys4CGGAboq4prLNRKeUGVexMDK7Eorsv9xmzK0tE9QSMA3SxLCcSIX +# mrMkKzTR3vn0dqaDG4Ge7U2w7dVnQYGBX+s6C9CCjvCtenCAQLbF+OyYhkMNDVtJ +# lTmzxxwyyA5fFZJpG/Wfo/84/P8lQXUTuwOBpFoLE65OqNEG03SoqKsW4aTqkVM7 +# b6fKLsygm1w23+UlHGF/fbExeqxgOZiuJWWt/OFy9T3HIcAF1SMh7mot5ciu7btS +# xjkr/fhsi1M3M1g/giyn0I8N24mgaICPtXAzAbZW7GSC0R5T2qnW6gYoAcY62Qdz +# jl/Ey1rnOQ26TuQODyPVHhfhoIBbdIDpDJ2Vu2mxyxUnjATbizphcBgsU1fBYvZR +# v+SuK1MYZOGqgzugfiufdeFAlBDA/e64yRkJvDBEkcyGvj6FS6nVm7ekJpJhLU3z +# sSSmcYwdx1YQCr48HEjcmGrj5sAzzg4U4WU/GrLWz2sSRmh5rKcDAa0ewfYi13Z2 +# a/cdr8Or2RQ5ZSQ8OHgr3GBw7koDWR8= +# SIG # End signature block diff --git a/Deltares/Repositories/Scripts/activate b/Deltares/Repositories/Scripts/activate new file mode 100644 index 0000000..177e9e6 --- /dev/null +++ b/Deltares/Repositories/Scripts/activate @@ -0,0 +1,63 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # Call hash to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + hash -r 2> /dev/null + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + unset VIRTUAL_ENV_PROMPT + if [ ! "${1:-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="C:\Users\zuiderwi\OneDrive - Stichting Deltares\Repositories\Software&Scoping\Deltares\Repositories" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/Scripts:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + PS1="(Repositories) ${PS1:-}" + export PS1 + VIRTUAL_ENV_PROMPT="(Repositories) " + export VIRTUAL_ENV_PROMPT +fi + +# Call hash to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +hash -r 2> /dev/null diff --git a/Deltares/Repositories/Scripts/activate.bat b/Deltares/Repositories/Scripts/activate.bat new file mode 100644 index 0000000..5afd605 --- /dev/null +++ b/Deltares/Repositories/Scripts/activate.bat @@ -0,0 +1,34 @@ +@echo off + +rem This file is UTF-8 encoded, so we need to update the current code page while executing it +for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do ( + set _OLD_CODEPAGE=%%a +) +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" 65001 > nul +) + +set VIRTUAL_ENV=C:\Users\zuiderwi\OneDrive - Stichting Deltares\Repositories\Software&Scoping\Deltares\Repositories + +if not defined PROMPT set PROMPT=$P$G + +if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT% +if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME% + +set _OLD_VIRTUAL_PROMPT=%PROMPT% +set PROMPT=(Repositories) %PROMPT% + +if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME% +set PYTHONHOME= + +if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH% +if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH% + +set PATH=%VIRTUAL_ENV%\Scripts;%PATH% +set VIRTUAL_ENV_PROMPT=(Repositories) + +:END +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul + set _OLD_CODEPAGE= +) diff --git a/Deltares/Repositories/Scripts/deactivate.bat b/Deltares/Repositories/Scripts/deactivate.bat new file mode 100644 index 0000000..62a39a7 --- /dev/null +++ b/Deltares/Repositories/Scripts/deactivate.bat @@ -0,0 +1,22 @@ +@echo off + +if defined _OLD_VIRTUAL_PROMPT ( + set "PROMPT=%_OLD_VIRTUAL_PROMPT%" +) +set _OLD_VIRTUAL_PROMPT= + +if defined _OLD_VIRTUAL_PYTHONHOME ( + set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" + set _OLD_VIRTUAL_PYTHONHOME= +) + +if defined _OLD_VIRTUAL_PATH ( + set "PATH=%_OLD_VIRTUAL_PATH%" +) + +set _OLD_VIRTUAL_PATH= + +set VIRTUAL_ENV= +set VIRTUAL_ENV_PROMPT= + +:END diff --git a/Deltares/Repositories/Scripts/pip.exe b/Deltares/Repositories/Scripts/pip.exe new file mode 100644 index 0000000..b2b9d4a Binary files /dev/null and b/Deltares/Repositories/Scripts/pip.exe differ diff --git a/Deltares/Repositories/Scripts/pip3.11.exe b/Deltares/Repositories/Scripts/pip3.11.exe new file mode 100644 index 0000000..b2b9d4a Binary files /dev/null and b/Deltares/Repositories/Scripts/pip3.11.exe differ diff --git a/Deltares/Repositories/Scripts/pip3.exe b/Deltares/Repositories/Scripts/pip3.exe new file mode 100644 index 0000000..b2b9d4a Binary files /dev/null and b/Deltares/Repositories/Scripts/pip3.exe differ diff --git a/Deltares/Repositories/Scripts/python.exe b/Deltares/Repositories/Scripts/python.exe new file mode 100644 index 0000000..f7cb1e3 Binary files /dev/null and b/Deltares/Repositories/Scripts/python.exe differ diff --git a/Deltares/Repositories/Scripts/pythonw.exe b/Deltares/Repositories/Scripts/pythonw.exe new file mode 100644 index 0000000..4fc3f90 Binary files /dev/null and b/Deltares/Repositories/Scripts/pythonw.exe differ diff --git a/Deltares/Repositories/pyvenv.cfg b/Deltares/Repositories/pyvenv.cfg new file mode 100644 index 0000000..3c7a0d3 --- /dev/null +++ b/Deltares/Repositories/pyvenv.cfg @@ -0,0 +1,5 @@ +home = C:\Users\zuiderwi\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0 +include-system-site-packages = false +version = 3.11.9 +executable = C:\Users\zuiderwi\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\python.exe +command = C:\Users\zuiderwi\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\python.exe -m venv C:\Users\zuiderwi\OneDrive - Stichting Deltares\Repositories\Software&Scoping\Deltares\Repositories diff --git a/README.md b/README.md index 38357a6..a830e0b 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ The following modules are identified: 2. Lockgate2: 3. Lockgate3: 4. Lockgate4: -5. Lockgate5: +5. Lockgate5: Calculates the forces exerted by passing vessels on opened lock gate. 6. Lockgate6: 7. Lockgate7: 8. Lockgate8: diff --git a/Stichting/Scripts/Activate.ps1 b/Stichting/Scripts/Activate.ps1 new file mode 100644 index 0000000..dbbf985 --- /dev/null +++ b/Stichting/Scripts/Activate.ps1 @@ -0,0 +1,502 @@ +<# +.Synopsis +Activate a Python virtual environment for the current PowerShell session. + +.Description +Pushes the python executable for a virtual environment to the front of the +$Env:PATH environment variable and sets the prompt to signify that you are +in a Python virtual environment. Makes use of the command line switches as +well as the `pyvenv.cfg` file values present in the virtual environment. + +.Parameter VenvDir +Path to the directory that contains the virtual environment to activate. The +default value for this is the parent of the directory that the Activate.ps1 +script is located within. + +.Parameter Prompt +The prompt prefix to display when this virtual environment is activated. By +default, this prompt is the name of the virtual environment folder (VenvDir) +surrounded by parentheses and followed by a single space (ie. '(.venv) '). + +.Example +Activate.ps1 +Activates the Python virtual environment that contains the Activate.ps1 script. + +.Example +Activate.ps1 -Verbose +Activates the Python virtual environment that contains the Activate.ps1 script, +and shows extra information about the activation as it executes. + +.Example +Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv +Activates the Python virtual environment located in the specified location. + +.Example +Activate.ps1 -Prompt "MyPython" +Activates the Python virtual environment that contains the Activate.ps1 script, +and prefixes the current prompt with the specified string (surrounded in +parentheses) while the virtual environment is active. + +.Notes +On Windows, it may be required to enable this Activate.ps1 script by setting the +execution policy for the user. You can do this by issuing the following PowerShell +command: + +PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser + +For more information on Execution Policies: +https://go.microsoft.com/fwlink/?LinkID=135170 + +#> +Param( + [Parameter(Mandatory = $false)] + [String] + $VenvDir, + [Parameter(Mandatory = $false)] + [String] + $Prompt +) + +<# Function declarations --------------------------------------------------- #> + +<# +.Synopsis +Remove all shell session elements added by the Activate script, including the +addition of the virtual environment's Python executable from the beginning of +the PATH variable. + +.Parameter NonDestructive +If present, do not remove this function from the global namespace for the +session. + +#> +function global:deactivate ([switch]$NonDestructive) { + # Revert to original values + + # The prior prompt: + if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { + Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt + Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT + } + + # The prior PYTHONHOME: + if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { + Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME + Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME + } + + # The prior PATH: + if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { + Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH + Remove-Item -Path Env:_OLD_VIRTUAL_PATH + } + + # Just remove the VIRTUAL_ENV altogether: + if (Test-Path -Path Env:VIRTUAL_ENV) { + Remove-Item -Path env:VIRTUAL_ENV + } + + # Just remove VIRTUAL_ENV_PROMPT altogether. + if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) { + Remove-Item -Path env:VIRTUAL_ENV_PROMPT + } + + # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: + if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { + Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force + } + + # Leave deactivate function in the global namespace if requested: + if (-not $NonDestructive) { + Remove-Item -Path function:deactivate + } +} + +<# +.Description +Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the +given folder, and returns them in a map. + +For each line in the pyvenv.cfg file, if that line can be parsed into exactly +two strings separated by `=` (with any amount of whitespace surrounding the =) +then it is considered a `key = value` line. The left hand string is the key, +the right hand is the value. + +If the value starts with a `'` or a `"` then the first and last character is +stripped from the value before being captured. + +.Parameter ConfigDir +Path to the directory that contains the `pyvenv.cfg` file. +#> +function Get-PyVenvConfig( + [String] + $ConfigDir +) { + Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" + + # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). + $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue + + # An empty map will be returned if no config file is found. + $pyvenvConfig = @{ } + + if ($pyvenvConfigPath) { + + Write-Verbose "File exists, parse `key = value` lines" + $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath + + $pyvenvConfigContent | ForEach-Object { + $keyval = $PSItem -split "\s*=\s*", 2 + if ($keyval[0] -and $keyval[1]) { + $val = $keyval[1] + + # Remove extraneous quotations around a string value. + if ("'""".Contains($val.Substring(0, 1))) { + $val = $val.Substring(1, $val.Length - 2) + } + + $pyvenvConfig[$keyval[0]] = $val + Write-Verbose "Adding Key: '$($keyval[0])'='$val'" + } + } + } + return $pyvenvConfig +} + + +<# Begin Activate script --------------------------------------------------- #> + +# Determine the containing directory of this script +$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition +$VenvExecDir = Get-Item -Path $VenvExecPath + +Write-Verbose "Activation script is located in path: '$VenvExecPath'" +Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" +Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" + +# Set values required in priority: CmdLine, ConfigFile, Default +# First, get the location of the virtual environment, it might not be +# VenvExecDir if specified on the command line. +if ($VenvDir) { + Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" +} +else { + Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." + $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") + Write-Verbose "VenvDir=$VenvDir" +} + +# Next, read the `pyvenv.cfg` file to determine any required value such +# as `prompt`. +$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir + +# Next, set the prompt from the command line, or the config file, or +# just use the name of the virtual environment folder. +if ($Prompt) { + Write-Verbose "Prompt specified as argument, using '$Prompt'" +} +else { + Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" + if ($pyvenvCfg -and $pyvenvCfg['prompt']) { + Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" + $Prompt = $pyvenvCfg['prompt']; + } + else { + Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)" + Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" + $Prompt = Split-Path -Path $venvDir -Leaf + } +} + +Write-Verbose "Prompt = '$Prompt'" +Write-Verbose "VenvDir='$VenvDir'" + +# Deactivate any currently active virtual environment, but leave the +# deactivate function in place. +deactivate -nondestructive + +# Now set the environment variable VIRTUAL_ENV, used by many tools to determine +# that there is an activated venv. +$env:VIRTUAL_ENV = $VenvDir + +if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { + + Write-Verbose "Setting prompt to '$Prompt'" + + # Set the prompt to include the env name + # Make sure _OLD_VIRTUAL_PROMPT is global + function global:_OLD_VIRTUAL_PROMPT { "" } + Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT + New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt + + function global:prompt { + Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " + _OLD_VIRTUAL_PROMPT + } + $env:VIRTUAL_ENV_PROMPT = $Prompt +} + +# Clear PYTHONHOME +if (Test-Path -Path Env:PYTHONHOME) { + Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME + Remove-Item -Path Env:PYTHONHOME +} + +# Add the venv to the PATH +Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH +$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" + +# SIG # Begin signature block +# MIIvIwYJKoZIhvcNAQcCoIIvFDCCLxACAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBnL745ElCYk8vk +# dBtMuQhLeWJ3ZGfzKW4DHCYzAn+QB6CCE8MwggWQMIIDeKADAgECAhAFmxtXno4h +# MuI5B72nd3VcMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0xMzA4MDExMjAwMDBaFw0z +# ODAxMTUxMjAwMDBaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ +# bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0 +# IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +# AL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3EMB/z +# G6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKyunWZ +# anMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsFxl7s +# Wxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU15zHL +# 2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJBMtfb +# BHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObURWBf3 +# JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6nj3c +# AORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxBYKqx +# YxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5SUUd0 +# viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+xq4aL +# T8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjQjBAMA8GA1Ud +# EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTs1+OC0nFdZEzf +# Lmc/57qYrhwPTzANBgkqhkiG9w0BAQwFAAOCAgEAu2HZfalsvhfEkRvDoaIAjeNk +# aA9Wz3eucPn9mkqZucl4XAwMX+TmFClWCzZJXURj4K2clhhmGyMNPXnpbWvWVPjS +# PMFDQK4dUPVS/JA7u5iZaWvHwaeoaKQn3J35J64whbn2Z006Po9ZOSJTROvIXQPK +# 7VB6fWIhCoDIc2bRoAVgX+iltKevqPdtNZx8WorWojiZ83iL9E3SIAveBO6Mm0eB +# cg3AFDLvMFkuruBx8lbkapdvklBtlo1oepqyNhR6BvIkuQkRUNcIsbiJeoQjYUIp +# 5aPNoiBB19GcZNnqJqGLFNdMGbJQQXE9P01wI4YMStyB0swylIQNCAmXHE/A7msg +# dDDS4Dk0EIUhFQEI6FUy3nFJ2SgXUE3mvk3RdazQyvtBuEOlqtPDBURPLDab4vri +# RbgjU2wGb2dVf0a1TD9uKFp5JtKkqGKX0h7i7UqLvBv9R0oN32dmfrJbQdA75PQ7 +# 9ARj6e/CVABRoIoqyc54zNXqhwQYs86vSYiv85KZtrPmYQ/ShQDnUBrkG5WdGaG5 +# nLGbsQAe79APT0JsyQq87kP6OnGlyE0mpTX9iV28hWIdMtKgK1TtmlfB2/oQzxm3 +# i0objwG2J5VT6LaJbVu8aNQj6ItRolb58KaAoNYes7wPD1N1KarqE3fk3oyBIa0H +# EEcRrYc9B9F1vM/zZn4wggawMIIEmKADAgECAhAIrUCyYNKcTJ9ezam9k67ZMA0G +# CSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJ +# bmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0 +# IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0zNjA0MjgyMzU5NTla +# MGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UE +# AxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcgUlNBNDA5NiBTSEEz +# ODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDVtC9C +# 0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0JAfhS0/TeEP0F9ce +# 2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJrQ5qZ8sU7H/Lvy0da +# E6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhFLqGfLOEYwhrMxe6T +# SXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+FLEikVoQ11vkunKoA +# FdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh3K3kGKDYwSNHR7Oh +# D26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJwZPt4bRc4G/rJvmM +# 1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQayg9Rc9hUZTO1i4F4z +# 8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbIYViY9XwCFjyDKK05 +# huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchApQfDVxW0mdmgRQRNY +# mtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRroOBl8ZhzNeDhFMJlP +# /2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IBWTCCAVUwEgYDVR0T +# AQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHwYD +# VR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMG +# A1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYY +# aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2Fj +# ZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNV +# HR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRU +# cnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAEDMAgGBmeBDAEEATAN +# BgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql+Eg08yy25nRm95Ry +# sQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFFUP2cvbaF4HZ+N3HL +# IvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1hmYFW9snjdufE5Btf +# Q/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3RywYFzzDaju4ImhvTnh +# OE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5UbdldAhQfQDN8A+KVssIh +# dXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw8MzK7/0pNVwfiThV +# 9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnPLqR0kq3bPKSchh/j +# wVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatEQOON8BUozu3xGFYH +# Ki8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bnKD+sEq6lLyJsQfmC +# XBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQjiWQ1tygVQK+pKHJ6l +# /aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbqyK+p/pQd52MbOoZW +# eE4wggd3MIIFX6ADAgECAhAHHxQbizANJfMU6yMM0NHdMA0GCSqGSIb3DQEBCwUA +# MGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UE +# AxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcgUlNBNDA5NiBTSEEz +# ODQgMjAyMSBDQTEwHhcNMjIwMTE3MDAwMDAwWhcNMjUwMTE1MjM1OTU5WjB8MQsw +# CQYDVQQGEwJVUzEPMA0GA1UECBMGT3JlZ29uMRIwEAYDVQQHEwlCZWF2ZXJ0b24x +# IzAhBgNVBAoTGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uMSMwIQYDVQQDExpQ +# eXRob24gU29mdHdhcmUgRm91bmRhdGlvbjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +# ADCCAgoCggIBAKgc0BTT+iKbtK6f2mr9pNMUTcAJxKdsuOiSYgDFfwhjQy89koM7 +# uP+QV/gwx8MzEt3c9tLJvDccVWQ8H7mVsk/K+X+IufBLCgUi0GGAZUegEAeRlSXx +# xhYScr818ma8EvGIZdiSOhqjYc4KnfgfIS4RLtZSrDFG2tN16yS8skFa3IHyvWdb +# D9PvZ4iYNAS4pjYDRjT/9uzPZ4Pan+53xZIcDgjiTwOh8VGuppxcia6a7xCyKoOA +# GjvCyQsj5223v1/Ig7Dp9mGI+nh1E3IwmyTIIuVHyK6Lqu352diDY+iCMpk9Zanm +# SjmB+GMVs+H/gOiofjjtf6oz0ki3rb7sQ8fTnonIL9dyGTJ0ZFYKeb6BLA66d2GA +# LwxZhLe5WH4Np9HcyXHACkppsE6ynYjTOd7+jN1PRJahN1oERzTzEiV6nCO1M3U1 +# HbPTGyq52IMFSBM2/07WTJSbOeXjvYR7aUxK9/ZkJiacl2iZI7IWe7JKhHohqKuc +# eQNyOzxTakLcRkzynvIrk33R9YVqtB4L6wtFxhUjvDnQg16xot2KVPdfyPAWd81w +# tZADmrUtsZ9qG79x1hBdyOl4vUtVPECuyhCxaw+faVjumapPUnwo8ygflJJ74J+B +# Yxf6UuD7m8yzsfXWkdv52DjL74TxzuFTLHPyARWCSCAbzn3ZIly+qIqDAgMBAAGj +# ggIGMIICAjAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4E +# FgQUt/1Teh2XDuUj2WW3siYWJgkZHA8wDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQM +# MAoGCCsGAQUFBwMDMIG1BgNVHR8Ega0wgaowU6BRoE+GTWh0dHA6Ly9jcmwzLmRp +# Z2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNBNDA5NlNI +# QTM4NDIwMjFDQTEuY3JsMFOgUaBPhk1odHRwOi8vY3JsNC5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZTSEEzODQyMDIxQ0Ex +# LmNybDA+BgNVHSAENzA1MDMGBmeBDAEEATApMCcGCCsGAQUFBwIBFhtodHRwOi8v +# d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUF +# BzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6 +# Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWdu +# aW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZI +# hvcNAQELBQADggIBABxv4AeV/5ltkELHSC63fXAFYS5tadcWTiNc2rskrNLrfH1N +# s0vgSZFoQxYBFKI159E8oQQ1SKbTEubZ/B9kmHPhprHya08+VVzxC88pOEvz68nA +# 82oEM09584aILqYmj8Pj7h/kmZNzuEL7WiwFa/U1hX+XiWfLIJQsAHBla0i7QRF2 +# de8/VSF0XXFa2kBQ6aiTsiLyKPNbaNtbcucaUdn6vVUS5izWOXM95BSkFSKdE45O +# q3FForNJXjBvSCpwcP36WklaHL+aHu1upIhCTUkzTHMh8b86WmjRUqbrnvdyR2yd +# I5l1OqcMBjkpPpIV6wcc+KY/RH2xvVuuoHjlUjwq2bHiNoX+W1scCpnA8YTs2d50 +# jDHUgwUo+ciwpffH0Riq132NFmrH3r67VaN3TuBxjI8SIZM58WEDkbeoriDk3hxU +# 8ZWV7b8AW6oyVBGfM06UgkfMb58h+tJPrFx8VI/WLq1dTqMfZOm5cuclMnUHs2uq +# rRNtnV8UfidPBL4ZHkTcClQbCoz0UbLhkiDvIS00Dn+BBcxw/TKqVL4Oaz3bkMSs +# M46LciTeucHY9ExRVt3zy7i149sd+F4QozPqn7FrSVHXmem3r7bjyHTxOgqxRCVa +# 18Vtx7P/8bYSBeS+WHCKcliFCecspusCDSlnRUjZwyPdP0VHxaZg2unjHY3rMYIa +# tjCCGrICAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIElu +# Yy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJT +# QTQwOTYgU0hBMzg0IDIwMjEgQ0ExAhAHHxQbizANJfMU6yMM0NHdMA0GCWCGSAFl +# AwQCAQUAoIHIMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC +# AQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCBnAZ6P7YvTwq0fbF62 +# o7E75R0LxsW5OtyYiFESQckLhjBcBgorBgEEAYI3AgEMMU4wTKBGgEQAQgB1AGkA +# bAB0ADoAIABSAGUAbABlAGEAcwBlAF8AdgAzAC4AMQAxAC4AOQBfADIAMAAyADQA +# MAA0ADAAMgAuADAAMqECgAAwDQYJKoZIhvcNAQEBBQAEggIAg5wQO5NiKFirm9vr +# 1//X5G4t+z318Uagu8vJT/vTjkMTau86CF+SwP3pqC1H2ZMUyVYmVHae5dswKAMR +# hHY1VJV/0lJI+LdYcaxHI/WYzaFLbDrQI/Mty5cabjveG6geMlcJG4nYZlyQX+fJ +# 1k0ogeIF1owldecXP8t5e10WlHBlWb8IBnIPwMtJVZ2/y8NASxsnSJE7pEe7ijGe +# 5Bv9DXvoltKnMSVYv9u2vn7PeIq+Jm3n3kOGSIYtfdytEd1Fd6spfdcmIhqyzVk0 +# Hslq7Aqd7soT0xdmNa/amzEA4HRHpWGUhzOtcC+EqEIIJk9kTjyVgCiyWaB5gGko +# OAZfsxQn+a916iWwA7RrQ+TzBZq/pleUTLZzJmI3DXFjuJ1NDP6Sdw6KREgx6Yw4 +# q2NnnodKlGZkMDcGYPTM2sA4i6i6FsznWY4d8wE4J261YeUrVfIyTx+Q81W4KXoi +# C0x7Pe9Bjh4oJGM3YiLyhVL56sXZWxAC2C/vD3nvIvra9EpvlMvQh6b0xl0V4TSN +# dJ7T7VttR/WNjau46JIgbGZWCDBTTUAydQNoAZ4KnCrcIZCN6Y0qVokXsYHsVIto +# TsnM2+Ca09wxuOIfCOSKpAmqdJ/w2NwLwp+0gwrO2uzpCfbSbkAd+UQNv0joPyUp +# ywmsQndxqA8TaADp8TfkkpJywJGhghc/MIIXOwYKKwYBBAGCNwMDATGCFyswghcn +# BgkqhkiG9w0BBwKgghcYMIIXFAIBAzEPMA0GCWCGSAFlAwQCAQUAMHcGCyqGSIb3 +# DQEJEAEEoGgEZjBkAgEBBglghkgBhv1sBwEwMTANBglghkgBZQMEAgEFAAQg+Jhe +# IOzOttA8vliuL+r3CiY4EJTzfvPasXkI/vwkoI8CEHZ95Ht1TmSmU8+fM0kIG00Y +# DzIwMjQwNDAyMTIzMjEwWqCCEwkwggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f +# 5WEWMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdp +# Q2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2 +# IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEz +# MjM1OTU5WjBIMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4x +# IDAeBgNVBAMTF0RpZ2lDZXJ0IFRpbWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0B +# AQEFAAOCAg8AMIICCgKCAgEAo1NFhx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6 +# OyqcZ9xiFVjBqZMRp82qsmrdECmKHmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp +# 52n+W8PWKyAcwZeUtKVQgfLPywemMGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF +# 6g1hbJ3+cV7EBpo88MUueQ8bZlLjyNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G4 +# 5lKVtUfXeCk5a+B4WZfjRCtK1ZXO7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7p +# Be6q9iT1HbybHLK3X9/w7nZ9MZllR1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAs +# NJvj3m5kGQc3AZEPHLVRzapMZoOIaGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU +# 6mIIE9NpHnxkTZ0P387RXoyqq1AVybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwK +# WEwAPoVpdceDZNZ1zY8SdlalJPrXxGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFx +# smxxrz64b5bV4RAT/mFHCoz+8LbH1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbR +# yV8IpHCj7ArxES5k4MsiK8rxKBMhSVF+BmbTO77665E42FEHypS34lCh8zrTioPL +# QHsCAwEAAaOCAYswggGHMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYG +# A1UdJQEB/wQMMAoGCCsGAQUFBwMIMCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCG +# SAGG/WwHATAfBgNVHSMEGDAWgBS6FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4E +# FgQUpbbvE+fvzdBkodVWqWUxo97V40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDov +# L2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1 +# NlRpbWVTdGFtcGluZ0NBLmNybDCBkAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUH +# MAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDov +# L2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNI +# QTI1NlRpbWVTdGFtcGluZ0NBLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCp +# tZgXvHCNT4o8aJzYJf/LLOTN6l0ikuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX +# 4WCcK+3tPUiOuGu6fF29wmE3aEl3o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoF +# eoQpmLZXeY/bJlYrsPOnvTcM2Jh2T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+nji +# kxp2oml101DkRBK+IA2eqUTQ+OVJdwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBB +# Jt3eWpdPM43UjXd9dUWhpVgmagNF3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJ +# A+rUkTfvTVLzyWAhxFZH7doRS4wyw4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcs +# QdCaM0qoNtS5cpZ+l3k4SF/Kwtw9Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE +# 5jreODsHXjlY9HxzMVWggBHLFAx+rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS +# 2Dq4sUaGa7oX/cR3bBVsrquvczroSUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3 +# CtQC4Fxguyj/OOVSWtasFyIjTvTs0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUb +# c7aZ+WssBkbvQR7w8F/g29mtkIBEr4AQQYowggauMIIElqADAgECAhAHNje3JFR8 +# 2Ees/ShmKl5bMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0z +# NzAzMjIyMzU5NTlaMGMxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1 +# NiBUaW1lU3RhbXBpbmcgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +# AQDGhjUGSbPBPXJJUVXHJQPE8pE3qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI +# 82j6ffOciQt/nR+eDzMfUBMLJnOWbfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9 +# xBd/qxkrPkLcZ47qUT3w1lbU5ygt69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ +# 3HxqV3rwN3mfXazL6IRktFLydkf3YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5Emfv +# DqVjbOSmxR3NNg1c1eYbqMFkdECnwHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDET +# qVcplicu9Yemj052FVUmcJgmf6AaRyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHe +# IhTZgirHkr+g3uM+onP65x9abJTyUpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jo +# n7ZGs506o9UD4L/wojzKQtwYSH8UNM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ +# 9FHzNklNiyDSLFc1eSuo80VgvCONWPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/T +# Xkt2ElGTyYwMO1uKIqjBJgj5FBASA31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJg +# o1gJASgADoRU7s7pXcheMBK9Rp6103a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkw +# EgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+e +# yG8wHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQD +# AgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEF +# BQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRw +# Oi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# dDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkUm9vdEc0LmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglg +# hkgBhv1sBwEwDQYJKoZIhvcNAQELBQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGw +# GC4QTRPPMFPOvxj7x1Bd4ksp+3CKDaopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0 +# MWfNthKWb8RQTGIdDAiCqBa9qVbPFXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1D +# X+1gtqpPkWaeLJ7giqzl/Yy8ZCaHbJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw +# 1YpxdmXazPByoyP6wCeCRK6ZJxurJB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY +# +/umnXKvxMfBwWpx2cYTgAnEtp/Nh4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0I +# SQ+UzTl63f8lY5knLD0/a6fxZsNBzU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr +# 5Dhzq6YBT70/O3itTK37xJV77QpfMzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7y +# Rp11LB4nLCbbbxV7HhmLNriT1ObyF5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDop +# hrCYoCvtlUG3OtUVmDG0YgkPCr2B2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/ +# AAvkdgIm2fBldkKmKYcJRyvmfxqkhQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMO +# Hds3OBqhK/bt1nz8MIIFjTCCBHWgAwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkq +# hkiG9w0BAQwFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5j +# MRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBB +# c3N1cmVkIElEIFJvb3QgQ0EwHhcNMjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5 +# WjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +# ExB3d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJv +# b3QgRzQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1K +# PDAiMGkz7MKnJS7JIT3yithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2r +# snnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C +# 8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBf +# sXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY +# QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8 +# rhsDdV14Ztk6MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaY +# dj1ZXUJ2h4mXaXpI8OCiEhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+ +# wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw +# ++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+N +# P8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7F +# wI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUw +# AwEB/zAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAU +# Reuir/SSy4IxLVGLp6chnfNtyA8wDgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEB +# BG0wazAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsG +# AQUFBzAChjdodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1 +# cmVkSURSb290Q0EuY3J0MEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRp +# Z2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAow +# CDAGBgRVHSAAMA0GCSqGSIb3DQEBDAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/ +# Vwe9mqyhhyzshV6pGrsi+IcaaVQi7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLe +# JLxSA8hO0Cre+i1Wz/n096wwepqLsl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE +# 1Od/6Fmo8L8vC6bp8jQ87PcDx4eo0kxAGTVGamlUsLihVo7spNU96LHc/RzY9Hda +# XFSMb++hUD38dglohJ9vytsgjTVgHAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbO +# byMt9H5xaiNrIv8SuFQtJ37YOtnwtoeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYID +# djCCA3ICAQEwdzBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIElu +# Yy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYg +# VGltZVN0YW1waW5nIENBAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUA +# oIHRMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcN +# MjQwNDAyMTIzMjEwWjArBgsqhkiG9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4Jd +# zqqKycZPGZzPQDAvBgkqhkiG9w0BCQQxIgQg58bvIvjFkyBb2O0xwLgtU8RJLcMV +# kvIdXiq3TCLuhq4wNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBX +# aEE2b4KK2lWarjMWr00amtQMeCgwDQYJKoZIhvcNAQEBBQAEggIAhU3imuIvql4+ +# IqPz0Anf0ZIB5hbafNTx1WEVhPEG9iJr24gpjbWvepQrbWJf0FBj8wY9GeRab6iv +# 79MMxZkPpR/DMK1qFr1vIlw67JhpqqNkaNIa5G3pAHDYdHYcB+Utw1p5XPOBRu0A +# f4wQ5fwWugys4CGGAboq4prLNRKeUGVexMDK7Eorsv9xmzK0tE9QSMA3SxLCcSIX +# mrMkKzTR3vn0dqaDG4Ge7U2w7dVnQYGBX+s6C9CCjvCtenCAQLbF+OyYhkMNDVtJ +# lTmzxxwyyA5fFZJpG/Wfo/84/P8lQXUTuwOBpFoLE65OqNEG03SoqKsW4aTqkVM7 +# b6fKLsygm1w23+UlHGF/fbExeqxgOZiuJWWt/OFy9T3HIcAF1SMh7mot5ciu7btS +# xjkr/fhsi1M3M1g/giyn0I8N24mgaICPtXAzAbZW7GSC0R5T2qnW6gYoAcY62Qdz +# jl/Ey1rnOQ26TuQODyPVHhfhoIBbdIDpDJ2Vu2mxyxUnjATbizphcBgsU1fBYvZR +# v+SuK1MYZOGqgzugfiufdeFAlBDA/e64yRkJvDBEkcyGvj6FS6nVm7ekJpJhLU3z +# sSSmcYwdx1YQCr48HEjcmGrj5sAzzg4U4WU/GrLWz2sSRmh5rKcDAa0ewfYi13Z2 +# a/cdr8Or2RQ5ZSQ8OHgr3GBw7koDWR8= +# SIG # End signature block diff --git a/Stichting/Scripts/activate b/Stichting/Scripts/activate new file mode 100644 index 0000000..fe7eed4 --- /dev/null +++ b/Stichting/Scripts/activate @@ -0,0 +1,63 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # Call hash to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + hash -r 2> /dev/null + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + unset VIRTUAL_ENV_PROMPT + if [ ! "${1:-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="C:\Users\zuiderwi\OneDrive - Stichting Deltares\Repositories\Software&Scoping\Stichting" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/Scripts:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + PS1="(Stichting) ${PS1:-}" + export PS1 + VIRTUAL_ENV_PROMPT="(Stichting) " + export VIRTUAL_ENV_PROMPT +fi + +# Call hash to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +hash -r 2> /dev/null diff --git a/Stichting/Scripts/activate.bat b/Stichting/Scripts/activate.bat new file mode 100644 index 0000000..6dc74a9 --- /dev/null +++ b/Stichting/Scripts/activate.bat @@ -0,0 +1,34 @@ +@echo off + +rem This file is UTF-8 encoded, so we need to update the current code page while executing it +for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do ( + set _OLD_CODEPAGE=%%a +) +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" 65001 > nul +) + +set VIRTUAL_ENV=C:\Users\zuiderwi\OneDrive - Stichting Deltares\Repositories\Software&Scoping\Stichting + +if not defined PROMPT set PROMPT=$P$G + +if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT% +if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME% + +set _OLD_VIRTUAL_PROMPT=%PROMPT% +set PROMPT=(Stichting) %PROMPT% + +if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME% +set PYTHONHOME= + +if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH% +if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH% + +set PATH=%VIRTUAL_ENV%\Scripts;%PATH% +set VIRTUAL_ENV_PROMPT=(Stichting) + +:END +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul + set _OLD_CODEPAGE= +) diff --git a/Stichting/Scripts/deactivate.bat b/Stichting/Scripts/deactivate.bat new file mode 100644 index 0000000..62a39a7 --- /dev/null +++ b/Stichting/Scripts/deactivate.bat @@ -0,0 +1,22 @@ +@echo off + +if defined _OLD_VIRTUAL_PROMPT ( + set "PROMPT=%_OLD_VIRTUAL_PROMPT%" +) +set _OLD_VIRTUAL_PROMPT= + +if defined _OLD_VIRTUAL_PYTHONHOME ( + set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" + set _OLD_VIRTUAL_PYTHONHOME= +) + +if defined _OLD_VIRTUAL_PATH ( + set "PATH=%_OLD_VIRTUAL_PATH%" +) + +set _OLD_VIRTUAL_PATH= + +set VIRTUAL_ENV= +set VIRTUAL_ENV_PROMPT= + +:END diff --git a/Stichting/Scripts/pip.exe b/Stichting/Scripts/pip.exe new file mode 100644 index 0000000..2d35417 Binary files /dev/null and b/Stichting/Scripts/pip.exe differ diff --git a/Stichting/Scripts/pip3.11.exe b/Stichting/Scripts/pip3.11.exe new file mode 100644 index 0000000..2d35417 Binary files /dev/null and b/Stichting/Scripts/pip3.11.exe differ diff --git a/Stichting/Scripts/pip3.exe b/Stichting/Scripts/pip3.exe new file mode 100644 index 0000000..2d35417 Binary files /dev/null and b/Stichting/Scripts/pip3.exe differ diff --git a/Stichting/Scripts/python.exe b/Stichting/Scripts/python.exe new file mode 100644 index 0000000..f7cb1e3 Binary files /dev/null and b/Stichting/Scripts/python.exe differ diff --git a/Stichting/Scripts/pythonw.exe b/Stichting/Scripts/pythonw.exe new file mode 100644 index 0000000..4fc3f90 Binary files /dev/null and b/Stichting/Scripts/pythonw.exe differ diff --git a/Stichting/pyvenv.cfg b/Stichting/pyvenv.cfg new file mode 100644 index 0000000..18e0efe --- /dev/null +++ b/Stichting/pyvenv.cfg @@ -0,0 +1,5 @@ +home = C:\Users\zuiderwi\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0 +include-system-site-packages = false +version = 3.11.9 +executable = C:\Users\zuiderwi\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\python.exe +command = C:\Users\zuiderwi\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\python.exe -m venv C:\Users\zuiderwi\OneDrive - Stichting Deltares\Repositories\Software&Scoping\Stichting diff --git a/docs/Make.bat b/docs/Make.bat new file mode 100644 index 0000000..5394189 --- /dev/null +++ b/docs/Make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..bf3fae0 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,21 @@ + +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/images/Test_1.png b/docs/images/Test_1.png new file mode 100644 index 0000000..2e5b7fe Binary files /dev/null and b/docs/images/Test_1.png differ diff --git a/docs/images/Test_2.png b/docs/images/Test_2.png new file mode 100644 index 0000000..8346c3f Binary files /dev/null and b/docs/images/Test_2.png differ diff --git a/docs/images/Test_3.png b/docs/images/Test_3.png new file mode 100644 index 0000000..0f92e30 Binary files /dev/null and b/docs/images/Test_3.png differ diff --git a/docs/images/Test_4.png b/docs/images/Test_4.png new file mode 100644 index 0000000..8404946 Binary files /dev/null and b/docs/images/Test_4.png differ diff --git a/docs/images/Test_5.png b/docs/images/Test_5.png new file mode 100644 index 0000000..f368e91 Binary files /dev/null and b/docs/images/Test_5.png differ diff --git a/docs/images/Test_5_1.png b/docs/images/Test_5_1.png new file mode 100644 index 0000000..5b5a2ac Binary files /dev/null and b/docs/images/Test_5_1.png differ diff --git a/docs/images/Test_5_2.png b/docs/images/Test_5_2.png new file mode 100644 index 0000000..5b5fada Binary files /dev/null and b/docs/images/Test_5_2.png differ diff --git a/docs/images/Test_6.png b/docs/images/Test_6.png new file mode 100644 index 0000000..2a7195a Binary files /dev/null and b/docs/images/Test_6.png differ diff --git a/docs/images/Test_6_golf.png b/docs/images/Test_6_golf.png new file mode 100644 index 0000000..5352dfd Binary files /dev/null and b/docs/images/Test_6_golf.png differ diff --git a/docs/images/example_berekening.png b/docs/images/example_berekening.png new file mode 100644 index 0000000..ab40123 Binary files /dev/null and b/docs/images/example_berekening.png differ diff --git a/docs/images/example_invoer.png b/docs/images/example_invoer.png new file mode 100644 index 0000000..085d517 Binary files /dev/null and b/docs/images/example_invoer.png differ diff --git a/docs/images/example_uitvoer_code.png b/docs/images/example_uitvoer_code.png new file mode 100644 index 0000000..1095a4c Binary files /dev/null and b/docs/images/example_uitvoer_code.png differ diff --git a/docs/images/invarend_schip_wl_variatie.png b/docs/images/invarend_schip_wl_variatie.png new file mode 100644 index 0000000..7817171 Binary files /dev/null and b/docs/images/invarend_schip_wl_variatie.png differ diff --git a/docs/images/overzicht_kas_kolk.png b/docs/images/overzicht_kas_kolk.png new file mode 100644 index 0000000..ed317e9 Binary files /dev/null and b/docs/images/overzicht_kas_kolk.png differ diff --git a/docs/images/overzicht_kas_kolk_secties.png b/docs/images/overzicht_kas_kolk_secties.png new file mode 100644 index 0000000..6300835 Binary files /dev/null and b/docs/images/overzicht_kas_kolk_secties.png differ diff --git a/docs/input/Inv_Sam_nz_OG.IN b/docs/input/Inv_Sam_nz_OG.IN new file mode 100644 index 0000000..8d3b323 --- /dev/null +++ b/docs/input/Inv_Sam_nz_OG.IN @@ -0,0 +1,58 @@ +**########################################################### +**Date : 20-11-2024 +**Filename : Inv_Test_run.in +**Lock : Example +** +**Input file for program KASGOLF version 1994. +**Calculation of wave driven hydraulic head over an opened lock gate. +** +**Remark : Lines starting with '**' are for comments. +**########################################################### + +**Initial water level in gate recess (in Dutch: 'deurkas') [mNAP] +HKI = 0.00 + +**Position of the lock bottom [mNAP] +ZK = -4.00 + +**Length of the lock gate at the side of the lock chamber [m] +LKK = 10.00 + +**Length of the lock gate at the side of the gate recess [m] +LKAS = 10.00 + +**Width of the channel (section) between the wall of the gate recess and lock gate [m] +BKAS = 1.00 + +**Width of the vertical opening between locations V and A [m] +BA = 0.05 + +**Width of the vertical opening between locations W and B [m] +BB = 0.50 + +**Area of the horizontal opening underneath the lock gate [m2] +AO = 0 + +**Friction coefficient for the discharge through both vertical openings at the sides and the horizontal opening underneath the gate [-] +MU = 0.70 + +**Time step [s] +DT = 0.02 + +**Start time of the simulation [s] +TINIT = -6.0 + +**End time of the simulation [s] +TEND = 30.00 + +**Choice for propagation velocity wave (translatory wave (0) or sailing velocity ship (1)) +M0 = 0 + +**Sailing velocity of a ship when M0=1 +VS = 1.40 + +**Time array for the wave +T1 = -20.00, 0.00, 0.02, 35.00, 35.01, 100.00 + +**Wave height array for the wave +N1 = 0.00, 0.00, -0.37, -0.37, -0.37, -0.37 \ No newline at end of file diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000..dc6820f --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,7 @@ +sphinx==7.1.2 +sphinx-rtd-theme==1.3.0rc1 +matplotlib==3.7.2 +numpy==1.25.2 +pandas==2.0.3 +pyinstaller==6.3.0 +sphinxcontrib-images diff --git a/docs/source/KASGOLF.rst b/docs/source/KASGOLF.rst new file mode 100644 index 0000000..559376d --- /dev/null +++ b/docs/source/KASGOLF.rst @@ -0,0 +1,35 @@ +KASGOLF +============= + +This documentation is for **KASGOLF**, a 1D `Deltares `_ tool for calculating the effect of a wave originating from a ship sailing past an opened lockgate (when the gate is located in the gate recess ('deurkas' in Dutch)). KASGOLF is able to calculate the head difference over time for a gate with vertical openings at the sides as well as for a horizontal opening underneath the gate. KASGOLF was originally developed by Delft Hydraulics in 1994 as part of LOCKGATE2 [1]. The code has been converted from the original Fortran code to the currently available Python code in 2024 and contains the same functionality as version KASGOLF 1994. + +The KASGOLF code has been explained in the report ‘Krachten op puntdeuren en enkele draaideuren’ [3] and examples of simulation results from the code are presented in [1] & [3]. The code and its simulation results have not yet been validated with measurement data since the code has been setup to make quick and rough estimations [2]. + +The KASGOLF documentation covers the following topics. +1. The theory on which KASGOLF is based, +2. An example calculation, +3. A tutorial for setting up a KASGOLF schematization, +4. Instructions for running KASGOLF on your computer, +5. A sensitivity analysis that investigates the response of the simulation result to adjustments in a selection of parameters. + +.. toctree:: + :maxdepth: 1 + :caption: Contents: + + theory + getting-started + example + tutorial + sensitivity-analysis + support + +################## + +---------- +Literature +---------- +[1] WL | Delft Hydraulics (1994). ‘Krachten op puntdeuren en enkele draaideuren’ Report Q1442. + +[2] WL | Delft Hydraulics (1997). ‘Sluisprogrammatuur REN’ Report Q2317. + +[3] Ministerie van Verkeer en Waterstaat, Rijkswaterstaat, Bouwdienst (RWS, BD) (2000). ‘Handboek voor het ontwerpen van schutsluizen’. diff --git a/docs/source/WINDGOLF.rst b/docs/source/WINDGOLF.rst new file mode 100644 index 0000000..b29aa4a --- /dev/null +++ b/docs/source/WINDGOLF.rst @@ -0,0 +1,218 @@ +WINDGOLF +=========================== +This documentation provides a short description about the programs within the WINDGOLF folder and focuses on the program G75.FOR for calculating the Quasi-static loads of standing wave against a closed lock gate. + +Fortran Files +------------------------------------ + +The WINDGOLF file contains various codes that are updates to older versions. A list of all versions is given below: + +- **WGOLF.FOR**: + + - Computes wave periods (Ts) for various combinations of water depths and wave lengths. + - Based on the 1975 Shore Protection Manual. + +- **SIG.FOR**: + + - Calculates wave heights (Hg) and periods (Ts) for different depths, wind speeds, and fetch lengths. + - Based on the 1975 Shore Protection Manual. + +- **SIT.FOR**: + + - Determines the time required to reach the maximum wave height. + - Based on the 1975 Shore Protection Manual. + +- **SIH.FOR**: + + - Computes wave heights (Hg) and periods (Ts) for different depths, wind speeds, and fetch lengths. + - Based on the 1984 Shore Protection Manual. + +- **BREEK.FOR**: + + - Models wave breaking relationships using a hyperbolic tangent function and writes results to a file. + +- **G50.FOR**: + + - Calculates wave properties and the forces acting on the wave. + - Published June 18, 1991. + +- **G60.FOR**: + + - Iteratively determines wave lengths within the code. + - Published July 12, 1991. + +- **G70.FOR**: + + - Introduces coefficients for wave troughs (golfdal) and crests (golftop). + - Iterates over user-defined ranges of wave heights (Hg) and periods (Ts). + - Published July 12, 1993. + +- **G75.FOR**: + + - Includes a new formula to calculate hydrostatic forces. + - Published July 12, 1993. + +.. note:: + The following documentation focuses on explaining the latest version of the code (**G75.FOR**) and methodology used in that code. + + + + +The `G75.FOR` program calculates the Quasi-static loads against a vertical wall and was developed by Delft Hydraulics in 1994 [1]. This code was converted from Fortran to Python in 2024, maintaining the same functionality as the original. The Python code's output has been validated to match the Fortran code's results, but the underlying theory has not been verified. +The program reads input data from a specified file, performs various wave-related calculations, and writes the results to an output file. The calculation involves determining wave heights, mean water levels, pressures, and forces using linear wave theory and calculations of hydrostatic pressures. + +Function Overview +----------------- +The `G75` program calculates wave properties based on input parameters provided in an input file (`.IN`). It reads data, performs the calculations, and saves the results to an output file. + +Input parameters +^^^^^^^^^^ + +Below the structure of the input file is given: + +**Row 1**: ID + +**Row 2**: :math:`H_g`, :math:`T_s` + +**Row 3**: :math:`C_r`, :math:`C_n`, :math:`h_m`, :math:`h_b`, :math:`h_d` + +where: + +- **Identifier (ID)** : Identifier string for the data set. + +- **Wave Height** (:math:`H_g`): Incoming wave height (in meters). + +- **Wave Period** (:math:`T_s`): Wave period (in seconds). + +- **Reflection Coefficient** (:math:`C_r`): Reflection coefficient (taken as 1.0 for vertical walls). + +- **Coefficient for Elevated Mean Water Level** (:math:`C_n`): Coefficient for elevated mean water level. + +- **Mean Water Level** (:math:`h_m`): Mean water level before wave reflection, relative to NAP. + +- **Bed Level** (:math:`h_b`): Bed level, relative to NAP. + +- **Top of the Door Level** (:math:`h_d`): The top level of the door is positioned, relative to NAP. + + +Formulas Used +------------- +The following formulas are applied in the calculations: + +1. **Wave Height (reflected wave)**: + + .. math:: + H_{rr} = (1 + C_r) \cdot H_g + +2. **Mean Water Level (reflected wave)**: + + .. math:: + h_r = h_m + C_n \cdot H_g + + +3. **Water depth after wave reflection**: + + .. math:: + d_r = h_r - h_b + + + +4. **Wave length calculation**: + + Iteratively calculated using: + + + .. math:: + L_{g} = \frac{g \cdot T_s^2}{2 \pi} \cdot \tanh \left( \frac{2 \pi \cdot d_r}{L_{go}} \right) + + +5. **Wave number**: + + .. math:: + k = \frac{2 \pi}{L_g} + +6. **Angular frequency**: + + .. math:: + \omega = \sqrt{g \cdot k \cdot \tanh(k \cdot d_r)} + +7. **Pressure calculations for linear wave theory**: + + The pressures at different depths (z) are calculated in each time iteration step :math:`(i)` as: + + + .. math:: + p_{} = -\rho \cdot g \cdot z + \rho \cdot g \cdot \frac{H_{rr}}{2} \cdot \frac{\cosh(k \cdot (d_r + z))}{\cosh(k \cdot d_r)} \cdot \cos(\omega \cdot t) + + + + + +8. **Hydrostatic pressure calculation**: + + .. math:: + ph_{} = -\rho \cdot g \cdot z + \rho \cdot g \cdot \frac{H_{rr}}{2} \cdot \cos(\omega \cdot t) + +9. **Force calculations by linear wave theory**: + The force by linear wave theory is calculated in each iteration step :math:`(i)` as follows: + + + .. math:: + F_{h} = \frac{p_{r}}{2} \cdot (h_{o} - h_r) + \frac{p_{r} + p_{2}}{2} \cdot (h_r - h_{2}) +\frac{p_{2} + p_{3}}{2} \cdot (h_{2} - h_{3}) + \\ + \frac{p_{3} + p_{4}}{2} \cdot (h_{3} - h_{4}) +\frac{p_{4} + p_{5}}{2} \cdot (h_{4} - h_{5}) + \frac{p_{5} + p_b}{2} \cdot (h_{5} - h_b) \\ + + +10. **Hydrostatic force calculation**: + The hydrostatic force is calculated as: + + .. math:: + F_{hh} = 0.5 \cdot \rho \cdot g \cdot d_r^2 + + +Definitions of Parameters +------------------------- +- :math:`\rho`: Water density (kg/m³). +- :math:`g`: Gravitational acceleration (9.81 m/s²). +- :math:`\pi`: Mathematical constant. +- :math:`C_r`: Reflection coefficient. +- :math:`C_n`: Coefficient for elevated mean water level. +- :math:`h_m`: Mean water level before reflection (relative to NAP). +- :math:`h_b`: Bed level (relative to NAP). +- :math:`h_d`: Level of the top of the door (relative to NAP). +- :math:`H_g`: Initial wave height (m). +- :math:`T_s`: Wave period (s). +- :math:`h_r`: Adjusted water level (m). +- :math:`d_r`: Water depth after wave reflection (m). +- :math:`z, z_1, z_2, z_3, z_4, z_5, z_b, z_d`: Various depth levels used in calculations (m). +- :math:`L_{go}, L_g`: Initial and adjusted wave lengths (m). +- :math:`k`: Wave number (1/m). +- :math:`\omega`: Angular frequency (1/m). +- :math:`t`: Time (s). +- :math:`\eta`: Wave elevation (m). +- :math:`h_o`: Water surface elevation (m). +- :math:`z_o`: Wave elevation at the surface (m). +- :math:`p_r, p_2, p_3, p_4, p_5, p_b, p_d`: Pressures at various depths (Pa). +- :math:`ph_r, ph_2, ph_3, ph_4, ph_5, ph_b, ph_d`: Hydrostatic pressures at various depths (Pa). +- :math:`F_h`: Force by linear wave theory (N). +- :math:`F_{hh}`: Hydrostatic force (N). +- :math:`c_1, c_2`: Coefficients calculated for output. + +Output +------------------------- + +The program saves results in an output file (`.OUT`). Each row corresponds to a combination of wave height (:math:`H_g`) and wave period (:math:`T_s`) with the following columns: + +:math:`H_{rr}/(g \cdot T_s^2)`, :math:`c_1`, :math:`c_2`, :math:`H_{rr}/d_r`, + +Example Output +------------------------- +The values below are the first row from the code output using the default values. + +.. code-block:: text + + 0.02548, 0.99564, 1.00537, 0.05000 + +---------- +Literature +---------- +[1] WL | Delft Hydraulics (1994). ‘Krachten op puntdeuren en enkele draaideuren’ Report Q1442. \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 0000000..5e9fc69 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,65 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys + +sys.path.insert(0, os.path.abspath('../wrappers/python/src')) + +import sphinx_rtd_theme + +# -- Project information ----------------------------------------------------- + +project = 'LOCKGATE 2' +copyright = '2024, Nino Zuiderwijk, Ashraf Al-Mohagry' +author = 'Nino Zuiderwijk, Ashraf Al-Mohagry' + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinxcontrib.images', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +html_css_files = [ + 'css/custom.css', +] + +# We do not need or want to install the module when building documentation. +# See also Section 2.12.5 "I get import errors on libraries that depend on C +# modules" in the ReadTheDocs documentation. +# autodoc_mock_imports = ["pyzsf._zsf_cffi"] \ No newline at end of file diff --git a/docs/source/example.rst b/docs/source/example.rst new file mode 100644 index 0000000..3cffb4a --- /dev/null +++ b/docs/source/example.rst @@ -0,0 +1,27 @@ +.. |br| raw:: html + +
+ +.. _example: + +Example: Simple lock with schematized wave +=========== +This example demonstrates the capability of the KASGOLF code by applying it to an hypothetical scenario. An overview of the lock and lockgate can be found in the figure below. The simulation starts at time t=-6.0 [s] with a time step of 0.02 [s]. A negative wave with height h=-0.37 [m] arrives at location V at time t=0 [s] and propagates to location W with the velocity of the ship (M0=1 and VS=1.4 [m/s]). It is assumed that there is no horizontal opening underneath the gate (AO=0 [:math:`m^2`]) and the friction coefficient (:math:`\mu`) for the discharge through the vertical and horizontal openings between the lock chamber and gate recess is equal to 0.70 [-]. + +.. image:: ../images/example_berekening.png + +The result of schematizing the example lock will be generated by the code and shown in one figure. This figure shows the hydraulic head over the lockgate throughout time. Negative head is directed to the lock chamber and positive head is directed towards the gate recess. The output png figure is stored in the same directory and with the same name as the input file. The output figure of the previously schematized example is shown in the figure below: + +.. image:: ../images/example_uitvoer_code.png + +.. note:: + + As can be seen in the figure above, an instability occurs in the calculated hydraulic head. This is a numerical instability in the code caused by iterations of the discharge and water height of the translatory wave in the gate recess. See `sensitivity analysis `_ for a further analysis on this numerical instability. + +################## + +The input file that was used for the calculation of this example case is shown below. + +.. literalinclude:: ../input/Example_=0.6m.IN + :language: none + \ No newline at end of file diff --git a/docs/source/getting-started.rst b/docs/source/getting-started.rst new file mode 100644 index 0000000..ef887fb --- /dev/null +++ b/docs/source/getting-started.rst @@ -0,0 +1,19 @@ +.. _installatie: + +Getting started +=========== + +Requirements +-------------------------- +Typical end-users will use the function :py:func:`runKasgolf` to run a KASGOLF simulation. A few additional Python libraries are required to run this code. You can install the required libraries with the following command: + +.. code-block:: console + + pip3 install ./docs/requirements.txt + +Running a simulation +-------------------------- +Upon running a simulation with :py:func:`runKasgolf` a file explorer window will be opened that allows you to select one input file (``.in``) that is required for the simulation which describes the lock and gate characteristics and the wave boundary conditions. The input file already includes the decision for the method that is used to calculate the propagation velocity of the wave in the lock chamber (translatory wave (M0=0) or using the velocity of a passing ship (M0=1)). The KASGOLF code generates an output png figure which is stored in the same directory and with the same name of the input file in which '.in' is replaced by '.png'. An overview of the input file is provided in the figure below. + +.. image:: ../images/example_invoer.png + diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 0000000..df98699 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,23 @@ +LOCKGATE2 +=================================== +The software LOCKGATE has a wide variety of programs that calculate forces or any other hydrodynamic effects on lock gates in various conditions, hence the name. LOCKGATE contains two sets of codes under the names LOCKGATE1 (closing or opening of lock gates while subjected to flow or hydraulic head) and LOCKGATE2 (effects on closed or opened gates caused by waves originating from sailing ships or wind). This documentation specifically adresses the codes that are available within the set LOCKGATE2. + +LOCKGATE2 contains the codes KASGOLF and WINDGOLF. Both codes are discussed in this readthedocs. KASGOLF is extensively discussed in this documentation and a user guide to get started with the Python code (translated from Fortran) is provided. For WINDGOLF the readthedocs is limited to the theory of the Fortran code only. Reason is that the theory behind WINDGOLF is outdated so the code is not translated to Python and no user guide is provided. + + +.. note:: + + Caution! Currently, the translation of the Fortran codes provided in this readthedocs to Python code is still under construction. That means that the codes is not yet ready to be openly published. This read the docs is written as if the code has been finalised and published by Deltares, but is not the case! The completion of this code is planned for the future. + + +################## + +.. toctree:: + :maxdepth: 1 + :caption: Contents: + + KASGOLF + WINDGOLF + +################## + diff --git a/docs/source/sensitivity-analysis.rst b/docs/source/sensitivity-analysis.rst new file mode 100644 index 0000000..e5f861a --- /dev/null +++ b/docs/source/sensitivity-analysis.rst @@ -0,0 +1,49 @@ +Sensitivity Analysis +=========== +In this sensitivity analysis, parameters in the model are varied with respect to the example calculation in `example `_ which includes a negative wave from the drop in water level alongside a ship that exits a lock. The input file for this simulation has been presented in `tutorial `. + +The use of sailing velocity (M0=0) +-------------------------------- +As mentioned in `getting started `_, the user can choose to define the propagation velocity of the wave in the lock according to the shallow wave theory (M0=0 with c = +/- 6.27 [m/s]). Note that a negative wave (as used in this example) caused by a ship always propagates with the velocity of the ship and that this calculation is hypothetical to indicate the effect of this parameter. + +.. image:: ../images/Test_1.png + +As can be seen in the figure, for a propagation velocity of the wave in the lock chamber based on linear wave theory (equal to that in the gate recess) results in a significantly different shape. The peak negative head difference occurs earlier since the wave in the lock chamber reaches the second vertical opening at location W earlier. The peak itself is lowered since the translatory waves in the lock chamber and gate recess meet at location B. This is similar for the positive head difference peak. The numerical instability occurs at an earlier time step. + +Spacing between gate and gate recess wall +-------------------------------- + +A space is present between the gate and gate recess wall, referred to as 'channel'. The width of this channel is varied and the result is shown in the figure below. + +.. image:: ../images/Test_2.png + +As the figure shows, reducing the width of the channel increases the influence of the numerical instability and causes the instability to occur earlier in the simulation (even before the wave in the lock chamber reaches the second vertical opening at location W). This effect is reduced for a wider channel and therefore seems to be less sensitive. + +Width of the vertical opening +-------------------------------- + +Two vertical openings are present on the sides of the gate, which can differ in spacing. In the figure below, the spacing of the vertical opening at location A (BA, the first that is reached by the incoming wave) is varied. + +.. image:: ../images/Test_3.png + +From the figure it can be seen that the head difference is highly sensitive to the width of the opening at A (BA). A wider channel results in faster response of the waterlevel in the channel creating a positive peak in head difference immediatly after the wave arrives at location A. As a result, the negative peak is reduced. For the simulation in which BA (=0.70 [m]) exceeds BB (=0.50 [m]) a positive peak forms after the negative peak, whereas this is not the case for the simulation with BA=0.30 [m]. The numerical instability does not seem to have a clear relation to BA. + +Horizontal opening underneath the gate +-------------------------------- + +In addition to vertical openings at the sides of the gate, also a horizontal opening can be present underneath the gate. This variable is given as the area of this opening (AO) in [m2]. In previous runs, no horizontal opening was present. In the figure below this opening is implemented with varying area. + +.. image:: ../images/Test_4.png + +As can be seen in the figure, response in head difference is somewhat different when a horizontal gap is present. This is related to the response of the waterlevel in the gate recess. Additionally, an opening underneath the gate lowers the extremes in head difference, which is strongest for the negative head difference. The numerical instability seems to occur at the same moment in time during the simulation. + +Different wave shape +-------------------------------- + +In previous examples, a wave is used that is described as an instant change in waterlevel (within 1 timestep). In reality a wave has a smoother profile. The figure below shows the original steep wave profile and a smoother configuration. Note that the time span on the x-axis is altered compared to other figures. The second figure shows the head difference as calculated with this smoother wave (for result of the steep wave, see the blue line in the first figure). + +.. image:: ../images/Test_6_golf.png + +.. image:: ../images/Test_6.png + +As can be seen in the second figure above, the head difference output graph shows a smoother response. However, the extremes show similar values indicating that an instant wave can be used for this purpose. \ No newline at end of file diff --git a/docs/source/support.rst b/docs/source/support.rst new file mode 100644 index 0000000..7720a90 --- /dev/null +++ b/docs/source/support.rst @@ -0,0 +1,4 @@ +Support +========== + +Raise any issues on `GitHub `_ such that we can address your problem. \ No newline at end of file diff --git a/docs/source/theory.rst b/docs/source/theory.rst new file mode 100644 index 0000000..a551217 --- /dev/null +++ b/docs/source/theory.rst @@ -0,0 +1,29 @@ + +Theory +=========== + +KASGOLF can be used to calculate the head difference over an opened lockgate when a water level variation passes the gate. The head difference is the difference in water level between both sides of the lockgate (in the lock chamber and in the gate recess). This head difference is driven by a passing ship that sails in or out of the lock creating various water level variations. Literature [3] provides that for a ship sailing into the lock, a bow wave with certain height is pushed into the lock and forms a translatory wave with the propagation velocity as calculated with shallow wave theory. The movement of the ship forms a backflow and as a result the water level alongside the ship drops, see the figure below. For a ship that sails out of the lock only the latter water level variation occurs in the lock chamber. Further theory on the occurance of water level variation around a ship sailing in or out of a lock can be found in [3]. + +.. image:: ../images/invarend_schip_wl_variatie.png + +Through vertical openings on the sides of the gate and a horinzontal opening underneath the gate, water flows between the lock chamber and gate recess ('deurkas' in Dutch). These flows are calculated using the energy conservation law in open channel flow. As a result, a translatory wave will propagate through the gate recess affecting the head difference over the gate. The gate is considered as an infinitely thin plate, since processes within the vertical openings have minimal influence on the characteristics of the translatory wave in the gate recess and therefore can be neglected. A top view of an opened lock with propagating wave is shown in the figure below: + +.. image:: ../images/overzicht_kas_kolk.png + +For the calculation of these water levels, the length of the gate is divided in 10 equal sections (both channels are half and together count as 1, see the figure below) with each section having a water level on both sides of the lockgate. By averaging the water levels in the sections, the average water level on both sides of the gate is calculated and is translated into the head difference over the gate. Friction on the translatory wave in the gate recess is neglected in KASGOLF. + +.. image:: ../images/overzicht_kas_kolk_secties.png + +To run a simulation with KASGOLF, the bed level of the lock and the dimensions of the gate, gate recess and openings need to be inserted in the model. The wave height of the water level variation in the lock chamber is inserted as a time array for location A. After a certain delay, this wave height then reaches location B. For the propagation velocity of this wave in the lock chamber the user of the model can choose between two options: 1) the propagation velocity of the translatory wave or the sailing velocity of the ship. The propagation velocity of the translatory wave (wave celerity) in the gate recess is calculated using shallow wave theory: + +.. math:: + + c = \sqrt{g \cdot h} + +where: + +- c \ is the wave celerity \([m/s]\), +- g \ is the gravitational acceleration \([m/s^2]\), +- h \ is the water depth \([m]\). + + diff --git a/docs/source/tutorial.rst b/docs/source/tutorial.rst new file mode 100644 index 0000000..669afa8 --- /dev/null +++ b/docs/source/tutorial.rst @@ -0,0 +1,95 @@ +Tutorial +=========== + +This tutorial will guide you through the steps that are required to set up an input (``.in``) file. The step to use the input file for a KASGOLF simulation can be found in the `getting started `_ chapter of the documentation. + +Defining the wave characteristics +-------------------------------- + +The wave enforces the change in the system, leading to hydraulic head over the lock gate. This wave is defined by two characteristics: the wave height and the wave propagation velocity. + +The wave height must to be provided as an array that describes the wave height at location A (see `example `_) over time. For example, a wave is introduced that represents the drop in water level alongside a ship as it exits a lock. The wave height array at location V is [0.0, 0.0, -0.37, -0.37, -0.37] at times [-20.00, 0.00, 0.02, 35.00, 100.00]. Through linear interpolation, the wave height at times in-between two indicated moments is determined (e.g. between t=0.02 [s] and arrival of the trench t=35.00 [s]). Note that the values in the time and wave height arrays do not need to be defined at discrete intervals. + +.. code-block:: none + + **Time array for the wave + T1 = -20.00, 0.00, 0.02, 35.00, 100.00 + + **Wave height array for the wave + N1 = 0.00, 0.00, -0.37, -0.37, -0.37 + +Additionally, KASGOLF allows the user to choose between two options for the delay in the arrival of the wave in the lock chamber between location V and W. The first option calculates this delay based on the propagation velocity from shallow wave theory (M0=0), which depends on the water depth. The second option is to calculate this delay based on the sailing velocity of a ship in the lock (M0=1). In the latter case, a value needs to provided to the parameter for ship sailing velocity (VS). In this example, the water level drop alongside a ship that enters a lock is modelled (M0=1 with VS=1.40 [m/s]). + +.. code-block:: none + + **Choice for delay wave arrival between location V and W (translatory wave (0) or sailing velocity ship (1)) + M0 = 1 + + **Sailing velocity of a ship when M0=1 + VS = 1.40 + +Creating the input file +-------------------------------- +The input file (``.in``) can now be created. The standard format for input files contains comments (``**``) to help the user with the set-up. A completed input file, with the examples used above, is shown below. This file can be copied and re-used to create your own schematization. + +.. code-block:: none + + **########################################################### + **Date : 20-11-2024 + **Filename : tutorial.in + **Lock : Example + ** + **Input file for program KASGOLF version 1994. + **Calculation of wave driven hydraulic head over an opened lock gate. + ** + **Remark : Lines starting with '**' are for comments. + **########################################################### + + **Initial water level in gate recess (in Dutch: 'deurkas') [mNAP] + HKI = 0.00 + + **Position of the lock bottom [mNAP] + ZK = -4.00 + + **Length of the lock gate at the side of the lock chamber [m] + LKK = 10.00 + + **Length of the lock gate at the side of the gate recess [m] + LKAS = 10.00 + + **Width of the channel (section) between the wall of the gate recess and lock gate [m] + BKAS = 1.00 + + **Width of the vertical opening between locations V and A [m] + BA = 0.05 + + **Width of the vertical opening between locations W and B [m] + BB = 0.50 + + **Area of the horizontal opening underneath the lock gate [m2] + AO = 0 + + **Friction coefficient for the discharge through both vertical openings at the sides and the horizontal opening underneath the gate [-] + MU = 0.70 + + **Time step [s] + DT = 0.02 + + **Start time of the simulation [s] + TINIT = -6.0 + + **End time of the simulation [s] + TEND = 30.00 + + **Choice for delay wave arrival between location V and W (translatory wave (0) or sailing velocity ship (1)) + M0 = 1 + + **Sailing velocity of a ship when M0=1 + VS = 1.40 + + **Time array for the wave + T1 = -20.00, 0.00, 0.02, 35.00, 100.00 + + **Wave height array for the wave + N1 = 0.00, 0.00, -0.37, -0.37, -0.37 + diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 385ec64..0000000 --- a/requirements.txt +++ /dev/null @@ -1,12 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --output-file=requirements.txt pyproject.toml -# -coloredlogs==15.0.1 - # via lockgate (pyproject.toml) -humanfriendly==10.0 - # via coloredlogs -pyreadline3==3.4.1 - # via humanfriendly diff --git a/src/lockgate/Schip/Example_=0.6m.png b/src/lockgate/Schip/Example_=0.6m.png new file mode 100644 index 0000000..300655a Binary files /dev/null and b/src/lockgate/Schip/Example_=0.6m.png differ diff --git a/src/lockgate/Schip/Example_readthedocs.IN b/src/lockgate/Schip/Example_readthedocs.IN new file mode 100644 index 0000000..dc71e4b --- /dev/null +++ b/src/lockgate/Schip/Example_readthedocs.IN @@ -0,0 +1,58 @@ +**########################################################### +**Date : 20-11-2024 +**Filename : Example.in +**Lock : Example +** +**Input file for program KASGOLF version 1994. +**Calculation of wave driven hydraulic head over an opened lock gate. +** +**Remark : Lines starting with '**' are for comments. +**########################################################### + +**Initial water level in gate recess (in Dutch: 'deurkas') [mNAP] +HKI = 0.00 + +**Position of the lock bottom [mNAP] +ZK = -4.00 + +**Length of the lock gate at the side of the lock chamber [m] +LKK = 10.00 + +**Length of the lock gate at the side of the gate recess [m] +LKAS = 10.00 + +**Width of the channel (section) between the wall of the gate recess and lock gate [m] +BKAS = 1.00 + +**Width of the vertical opening between locations V and A [m] +BA = 0.05 + +**Width of the vertical opening between locations W and B [m] +BB = 0.50 + +**Area of the horizontal opening underneath the lock gate [m2] +AO = 0 + +**Friction coefficient for the discharge through both vertical openings at the sides and the horizontal opening underneath the gate [-] +MU = 0.70 + +**Time step [s] +DT = 0.02 + +**Start time of the simulation [s] +TINIT = -6.0 + +**End time of the simulation [s] +TEND = 30.00 + +**Choice for delay wave arrival between location V and W (translatory wave (0) or sailing velocity ship (1)) +M0 = 1 + +**Sailing velocity of a ship when M0=1 +VS = 1.40 + +**Time array for the wave +T1 = -20.00, 0.00, 0.02, 35.00, 100.00 + +**Wave height array for the wave +N1 = 0.00, 0.00, -0.37, -0.37, -0.37 \ No newline at end of file diff --git a/src/lockgate/Schip/Example_readthedocs.png b/src/lockgate/Schip/Example_readthedocs.png new file mode 100644 index 0000000..d825de1 Binary files /dev/null and b/src/lockgate/Schip/Example_readthedocs.png differ diff --git a/src/lockgate/Schip/Fort_uitv_10dt.out b/src/lockgate/Schip/Fort_uitv_10dt.out new file mode 100644 index 0000000..939f0a3 --- /dev/null +++ b/src/lockgate/Schip/Fort_uitv_10dt.out @@ -0,0 +1,179 @@ + -5.800, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.600, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.400, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.200, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.800, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.600, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.400, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.200, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.800, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.600, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.400, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.200, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.800, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.600, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.400, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.200, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.800, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.600, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.400, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.200, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.800, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.600, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.400, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.200, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + 0.200,-0.3700,-0.0527, 0.0000, 0.0000, 0.0000,-0.0083,-0.0185,-0.0102, + 0.400,-0.3700,-0.0546, 0.0000, 0.0000, 0.0000,-0.0139,-0.0185,-0.0046, + 0.600,-0.3700,-0.0552, 0.0000, 0.0000, 0.0000,-0.0195,-0.0185, 0.0010, + 0.800,-0.3700,-0.0554, 0.0000, 0.0000, 0.0000,-0.0250,-0.0555,-0.0305, + 1.000,-0.3700,-0.0555,-0.0558, 0.0000, 0.0000,-0.0362,-0.0555,-0.0193, + 1.200,-0.3700,-0.0555,-0.0556, 0.0000, 0.0000,-0.0417,-0.0555,-0.0138, + 1.400,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0473,-0.0555,-0.0082, + 1.600,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0528,-0.0925,-0.0397, + 1.800,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0483,-0.0925,-0.0442, + 2.000,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0442,-0.0925,-0.0483, + 2.200,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0397,-0.1295,-0.0898, + 2.400,-0.3700,-0.0555,-0.0555,-0.0103, 0.0000,-0.0352,-0.1295,-0.0943, + 2.600,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0257,-0.1295,-0.1038, + 2.800,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0216,-0.1295,-0.1079, + 3.000,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0171,-0.1665,-0.1494, + 3.200,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0126,-0.1665,-0.1539, + 3.400,-0.3700, 0.0263,-0.0103,-0.0103, 0.0000,-0.0085,-0.1665,-0.1580, + 3.600,-0.3700, 0.0274,-0.0103,-0.0103, 0.0000,-0.0006,-0.2035,-0.2029, + 3.800,-0.3700, 0.0277,-0.0103,-0.0103, 0.0000, 0.0031,-0.2035,-0.2066, + 4.000,-0.3700, 0.0278,-0.0103,-0.0103, 0.0000, 0.0069,-0.2035,-0.2104, + 4.200,-0.3700, 0.0279, 0.0280,-0.0103, 0.0000, 0.0107,-0.2035,-0.2142, + 4.400,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0186,-0.2405,-0.2591, + 4.600,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0222,-0.2405,-0.2627, + 4.800,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0260,-0.2405,-0.2665, + 5.000,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0265,-0.2405,-0.2670, + 5.200,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0237,-0.2775,-0.3012, + 5.400,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0185,-0.2775,-0.2960, + 5.600,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0150,-0.2775,-0.2925, + 5.800,-0.3700, 0.0279,-0.0008,-0.0011, 0.0000, 0.0120,-0.3145,-0.3265, + 6.000,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0091,-0.3145,-0.3236, + 6.200,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0040,-0.3145,-0.3185, + 6.400,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0005,-0.3145,-0.3150, + 6.600,-0.3700,-0.0183,-0.0011,-0.0011, 0.0000,-0.0020,-0.3515,-0.3495, + 6.800,-0.3700,-0.0234,-0.0011,-0.0011, 0.0000,-0.0048,-0.3515,-0.3467, + 7.000,-0.3700,-0.0251,-0.0011,-0.0011, 0.0000,-0.0093,-0.3515,-0.3422, + 7.200,-0.3700,-0.0258,-0.0011,-0.2975,-0.3700,-0.0271,-0.3700,-0.3429, + 7.400,-0.3700,-0.0258,-0.0264,-0.2987,-0.3700,-0.0596,-0.3700,-0.3104, + 7.600,-0.3700,-0.0258,-0.0260,-0.2988,-0.3700,-0.0918,-0.3700,-0.2782, + 7.800,-0.3700,-0.0258,-0.0259,-0.2988,-0.3700,-0.1563,-0.3700,-0.2137, + 8.000,-0.3700,-0.0258,-0.3267,-0.2988,-0.3700,-0.1886,-0.3700,-0.1814, + 8.200,-0.3700,-0.0258,-0.3235,-0.3165,-0.3700,-0.2191,-0.3700,-0.1509, + 8.400,-0.3700,-0.0258,-0.3234,-0.3155,-0.3700,-0.2477,-0.3700,-0.1223, + 8.600,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.3072,-0.3700,-0.0628, + 8.800,-0.3700,-0.5267,-0.3234,-0.3153,-0.3700,-0.3298,-0.3700,-0.0402, + 9.000,-0.3700,-0.5241,-0.3110,-0.3153,-0.3700,-0.3488,-0.3700,-0.0212, + 9.200,-0.3700,-0.5241,-0.3152,-0.3153,-0.3700,-0.3682,-0.3700,-0.0018, + 9.400,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.3876,-0.3700, 0.0176, + 9.600,-0.3700,-0.5241,-0.5203,-0.3153,-0.3700,-0.4264,-0.3700, 0.0564, + 9.800,-0.3700,-0.5050,-0.5162,-0.3153,-0.3700,-0.4454,-0.3700, 0.0754, + 10.000,-0.3700,-0.5095,-0.5160,-0.3153,-0.3700,-0.4646,-0.3700, 0.0946, + 10.200,-0.3700,-0.5097,-0.5160,-0.3153,-0.3700,-0.4842,-0.3700, 0.1142, + 10.400,-0.3700,-0.5098,-0.5160,-0.3838,-0.3700,-0.5061,-0.3700, 0.1361, + 10.600,-0.3700,-0.5098,-0.5036,-0.3811,-0.3700,-0.4920,-0.3700, 0.1220, + 10.800,-0.3700,-0.5098,-0.5096,-0.3811,-0.3700,-0.4781,-0.3700, 0.1081, + 11.000,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4641,-0.3700, 0.0941, + 11.200,-0.3700,-0.5098,-0.3663,-0.3811,-0.3700,-0.4346,-0.3700, 0.0646, + 11.400,-0.3700,-0.5098,-0.3753,-0.3788,-0.3700,-0.4225,-0.3700, 0.0525, + 11.600,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.4091,-0.3700, 0.0391, + 11.800,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3958,-0.3700, 0.0258, + 12.000,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3825,-0.3700, 0.0125, + 12.200,-0.3700,-0.3043,-0.3752,-0.3790,-0.3700,-0.3658,-0.3700,-0.0042, + 12.400,-0.3700,-0.3030,-0.3781,-0.3790,-0.3700,-0.3592,-0.3700,-0.0108, + 12.600,-0.3700,-0.3027,-0.3790,-0.3790,-0.3700,-0.3523,-0.3700,-0.0177, + 12.800,-0.3700,-0.3026,-0.3790,-0.3790,-0.3700,-0.3453,-0.3700,-0.0247, + 13.000,-0.3700,-0.3039,-0.3071,-0.3790,-0.3700,-0.3317,-0.3700,-0.0383, + 13.200,-0.3700,-0.3067,-0.3067,-0.3790,-0.3700,-0.3260,-0.3700,-0.0440, + 13.400,-0.3700,-0.3089,-0.3067,-0.3790,-0.3700,-0.3184,-0.3700,-0.0516, + 13.600,-0.3700,-0.3094,-0.3067,-0.3790,-0.3700,-0.3112,-0.3700,-0.0588, + 13.800,-0.3700,-0.3095,-0.3079,-0.3685,-0.3700,-0.3181,-0.3700,-0.0519, + 14.000,-0.3700,-0.3095,-0.3090,-0.3684,-0.3700,-0.3247,-0.3700,-0.0453, + 14.200,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3309,-0.3700,-0.0391, + 14.400,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3370,-0.3700,-0.0330, + 14.600,-0.3700,-0.3095,-0.3727,-0.3680,-0.3700,-0.3504,-0.3700,-0.0196, + 14.800,-0.3700,-0.3095,-0.3712,-0.3684,-0.3700,-0.3564,-0.3700,-0.0136, + 15.000,-0.3700,-0.3095,-0.3711,-0.3688,-0.3700,-0.3622,-0.3700,-0.0078, + 15.200,-0.3700,-0.3095,-0.3711,-0.3688,-0.3700,-0.3678,-0.3700,-0.0022, + 15.400,-0.3700,-0.3950,-0.3728,-0.3688,-0.3700,-0.3720,-0.3700, 0.0020, + 15.600,-0.3700,-0.3935,-0.3642,-0.3688,-0.3700,-0.3763,-0.3700, 0.0063, + 15.800,-0.3700,-0.3933,-0.3689,-0.3688,-0.3700,-0.3770,-0.3700, 0.0070, + 16.000,-0.3700,-0.3933,-0.3688,-0.3688,-0.3700,-0.3795,-0.3700, 0.0095, + 16.200,-0.3700,-0.3933,-0.3924,-0.3688,-0.3700,-0.3818,-0.3700, 0.0118, + 16.400,-0.3700,-0.3978,-0.3909,-0.3688,-0.3700,-0.3865,-0.3700, 0.0165, + 16.600,-0.3700,-0.3890,-0.3909,-0.3688,-0.3700,-0.3850,-0.3700, 0.0150, + 16.800,-0.3700,-0.3896,-0.3909,-0.3688,-0.3700,-0.3897,-0.3700, 0.0197, + 17.000,-0.3700,-0.3898,-0.3909,-0.3737,-0.3700,-0.3895,-0.3700, 0.0195, + 17.200,-0.3700,-0.3898,-0.3963,-0.3734,-0.3700,-0.3863,-0.3700, 0.0163, + 17.400,-0.3700,-0.3898,-0.3897,-0.3734,-0.3700,-0.3963,-0.3700, 0.0263, + 17.600,-0.3700,-0.3896,-0.3897,-0.3734,-0.3700,-0.4006,-0.3700, 0.0306, + 17.800,-0.3700,-0.3897,-0.4169,-0.3734,-0.3700,-0.4037,-0.3700, 0.0337, + 18.000,-0.3700,-0.3897,-0.4200,-0.3688,-0.3700,-0.3998,-0.3700, 0.0298, + 18.200,-0.3700,-0.3898,-0.4201,-0.3733,-0.3700,-0.4034,-0.3700, 0.0334, + 18.400,-0.3700,-0.3897,-0.4200,-0.3733,-0.3700,-0.4153,-0.3700, 0.0453, + 18.600,-0.3700,-0.2899,-0.4201,-0.3732,-0.3700,-0.4114,-0.3700, 0.0414, + 18.800,-0.3700,-0.2903,-0.3190,-0.3732,-0.3700,-0.3986,-0.3700, 0.0286, + 19.000,-0.3700,-0.2903,-0.4213,-0.3732,-0.3700,-0.3977,-0.3700, 0.0277, + 19.200,-0.3700,-0.2903,-0.4215,-0.3732,-0.3700,-0.4053,-0.3700, 0.0353, + 19.400,-0.3700,-0.2903,-0.3927,-0.3732,-0.3700,-0.3978,-0.3700, 0.0278, + 19.600,-0.3700,-0.2909,-0.3928,-0.3732,-0.3700,-0.3953,-0.3700, 0.0253, + 19.800,-0.3700,-0.2912,-0.3928,-0.3732,-0.3700,-0.3937,-0.3700, 0.0237, + 20.000,-0.3700,-0.2910,-0.3927,-0.3732,-0.3700,-0.3951,-0.3700, 0.0251, + 20.200,-0.3700,-0.2980,-0.3928,-0.3711,-0.3700,-0.3871,-0.3700, 0.0171, + 20.400,-0.3700,-0.2980,-0.3930,-0.3717,-0.3700,-0.3804,-0.3700, 0.0104, + 20.600,-0.3700,-0.2980,-0.3932,-0.3717,-0.3700,-0.3705,-0.3700, 0.0005, + 20.800,-0.3700,-0.2980,-0.3931,-0.3717,-0.3700,-0.3626,-0.3700,-0.0074, + 21.000,-0.3700,-0.2980,-0.3271,-0.3717,-0.3700,-0.3528,-0.3700,-0.0172, + 21.200,-0.3700,-0.2980,-0.3235,-0.3715,-0.3700,-0.3457,-0.3700,-0.0243, + 21.400,-0.3700,-0.2980,-0.3234,-0.3718,-0.3700,-0.3402,-0.3700,-0.0298, + 21.600,-0.3700,-0.2980,-0.3235,-0.3719,-0.3700,-0.3286,-0.3700,-0.0414, + 21.800,-0.3700,-0.3431,-0.3234,-0.3721,-0.3700,-0.3269,-0.3700,-0.0431, + 22.000,-0.3700,-0.3962,-0.3245,-0.3721,-0.3700,-0.3326,-0.3700,-0.0374, + 22.200,-0.3700,-0.3961,-0.3228,-0.3721,-0.3700,-0.3399,-0.3700,-0.0301, + 22.400,-0.3700,-0.3961,-0.3226,-0.3721,-0.3700,-0.3449,-0.3700,-0.0251, + 22.600,-0.3700,-0.3961,-0.3405,-0.3721,-0.3700,-0.3437,-0.3700,-0.0263, + 22.800,-0.3700,-0.3934,-0.3546,-0.3721,-0.3700,-0.3479,-0.3700,-0.0221, + 23.000,-0.3700,-0.3955,-0.3545,-0.3721,-0.3700,-0.3511,-0.3700,-0.0189, + 23.200,-0.3700,-0.3957,-0.3546,-0.3721,-0.3700,-0.3565,-0.3700,-0.0135, + 23.400,-0.3700,-0.4081,-0.3545,-0.3718,-0.3700,-0.3548,-0.3700,-0.0152, + 23.600,-0.3700,-0.4080,-0.3573,-0.3716,-0.3700,-0.3558,-0.3700,-0.0142, + 23.800,-0.3700,-0.4081,-0.3543,-0.3716,-0.3700,-0.3637,-0.3700,-0.0063, + 24.000,-0.3700,-0.4080,-0.3545,-0.3716,-0.3700,-0.3685,-0.3700,-0.0015, + 24.200,-0.3700,-0.4081,-0.4333,-0.3716,-0.3700,-0.3942,-0.3700, 0.0242, + 24.400,-0.3700,-0.4012,-0.4334,-0.3726,-0.3700,-0.3947,-0.3700, 0.0247, + 24.600,-0.3700,-0.4080,-0.4335,-0.3715,-0.3700,-0.4032,-0.3700, 0.0332, + 24.800,-0.3700,-0.4081,-0.4334,-0.3663,-0.3700,-0.3970,-0.3700, 0.0270, + 25.000,-0.3700,-0.4475,-0.4335,-0.3663,-0.3700,-0.4006,-0.3700, 0.0306, + 25.200,-0.3700,-0.4288,-0.4289,-0.3663,-0.3700,-0.4069,-0.3700, 0.0369, + 25.400,-0.3700,-0.4288,-0.4334,-0.3663,-0.3700,-0.3977,-0.3700, 0.0277, + 25.600,-0.3700,-0.4288,-0.3351,-0.3663,-0.3700,-0.3680,-0.3700,-0.0020, + 25.800,-0.3700,-0.4288,-0.3508,-0.3663,-0.3700,-0.3553,-0.3700,-0.0147, + 26.000,-0.3700,-0.4016,-0.3433,-0.3662,-0.3700,-0.3610,-0.3700,-0.0090, + 26.200,-0.3700,-0.4299,-0.3434,-0.3663,-0.3700,-0.3623,-0.3700,-0.0077, + 26.400,-0.3700,-0.4291,-0.3433,-0.3663,-0.3700,-0.3436,-0.3700,-0.0264, + 26.600,-0.3700,-0.2941,-0.3434,-0.3676,-0.3700,-0.3423,-0.3700,-0.0277, + 26.800,-0.3700,-0.4156,-0.3346,-0.3725,-0.3700,-0.3496,-0.3700,-0.0204, + 27.000,-0.3700,-0.4154,-0.3437,-0.3725,-0.3700,-0.3664,-0.3700,-0.0036, + 27.200,-0.3700,-0.4155,-0.3435,-0.3725,-0.3700,-0.3586,-0.3700,-0.0114, + 27.400,-0.3700,-0.4154,-0.3730,-0.3725,-0.3700,-0.3636,-0.3700,-0.0064, + 27.600,-0.3700,-0.4155,-0.3628,-0.3675,-0.3700,-0.3599,-0.3700,-0.0101, + 27.800,-0.3700,-0.4156,-0.3627,-0.3725,-0.3700,-0.3670,-0.3700,-0.0030, + 28.000,-0.3700,-0.4155,-0.3628,-0.3725,-0.3700,-0.3679,-0.3700,-0.0021, + 28.200,-0.3700,-0.4156,-0.3627,-0.3686,-0.3700,-0.3788,-0.3700, 0.0088, + 28.400,-0.3700,-0.3551,-0.4098,-0.3685,-0.3700,-0.3770,-0.3700, 0.0070, + 28.600,-0.3700,-0.3498,-0.3628,-0.3685,-0.3700,-0.3736,-0.3700, 0.0036, + 28.800,-0.3700,-0.3498,-0.3628,-0.3685,-0.3700,-0.3761,-0.3700, 0.0061, + 29.000,-0.3700,-0.3498,-0.4042,-0.3685,-0.3700,-0.3883,-0.3700, 0.0183, + 29.200,-0.3700,-0.3499,-0.3908,-0.3685,-0.3700,-0.3869,-0.3700, 0.0169, + 29.400,-0.3700,-0.3522,-0.3926,-0.3685,-0.3700,-0.3850,-0.3700, 0.0150, + 29.600,-0.3700,-0.3497,-0.3928,-0.3685,-0.3700,-0.3865,-0.3700, 0.0165, + 29.800,-0.3700,-0.3531,-0.3927,-0.3685,-0.3700,-0.3904,-0.3700, 0.0204, diff --git a/src/lockgate/Schip/Fort_uitv_1dt.out b/src/lockgate/Schip/Fort_uitv_1dt.out new file mode 100644 index 0000000..9017b82 --- /dev/null +++ b/src/lockgate/Schip/Fort_uitv_1dt.out @@ -0,0 +1,1799 @@ + -5.980, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.960, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.940, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.920, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.900, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.880, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.860, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.840, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.820, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.800, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.780, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.760, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.740, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.720, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.700, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.680, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.660, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.640, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.620, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.600, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.580, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.560, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.540, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.520, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.500, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.480, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.460, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.440, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.420, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.400, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.380, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.360, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.340, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.320, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.300, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.280, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.260, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.240, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.220, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.200, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.180, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.160, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.140, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.120, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.100, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.080, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.060, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.040, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.020, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -5.000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.980, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.960, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.940, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.920, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.900, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.880, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.860, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.840, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.820, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.800, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.780, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.760, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.740, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.720, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.700, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.680, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.660, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.640, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.620, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.600, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.580, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.560, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.540, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.520, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.500, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.480, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.460, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.440, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.420, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.400, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.380, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.360, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.340, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.320, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.300, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.280, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.260, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.240, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.220, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.200, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.180, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.160, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.140, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.120, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.100, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.080, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.060, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.040, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.020, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -4.000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.980, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.960, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.940, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.920, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.900, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.880, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.860, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.840, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.820, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.800, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.780, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.760, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.740, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.720, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.700, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.680, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.660, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.640, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.620, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.600, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.580, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.560, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.540, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.520, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.500, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.480, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.460, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.440, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.420, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.400, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.380, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.360, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.340, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.320, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.300, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.280, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.260, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.240, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.220, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.200, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.180, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.160, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.140, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.120, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.100, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.080, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.060, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.040, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.020, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -3.000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.980, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.960, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.940, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.920, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.900, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.880, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.860, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.840, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.820, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.800, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.780, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.760, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.740, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.720, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.700, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.680, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.660, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.640, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.620, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.600, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.580, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.560, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.540, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.520, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.500, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.480, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.460, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.440, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.420, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.400, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.380, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.360, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.340, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.320, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.300, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.280, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.260, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.240, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.220, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.200, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.180, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.160, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.140, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.120, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.100, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.080, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.060, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.040, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.020, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -2.000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.980, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.960, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.940, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.920, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.900, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.880, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.860, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.840, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.820, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.800, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.780, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.760, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.740, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.720, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.700, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.680, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.660, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.640, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.620, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.600, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.580, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.560, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.540, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.520, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.500, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.480, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.460, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.440, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.420, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.400, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.380, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.360, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.340, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.320, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.300, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.280, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.260, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.240, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.220, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.200, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.180, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.160, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.140, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.120, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.100, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.080, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.060, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.040, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.020, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -1.000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.980, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.960, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.940, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.920, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.900, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.880, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.860, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.840, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.820, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.800, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.780, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.760, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.740, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.720, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.700, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.680, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.660, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.640, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.620, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.600, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.580, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.560, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.540, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.520, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.500, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.480, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.460, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.440, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.420, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.400, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.380, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.360, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.340, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.320, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.300, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.280, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.260, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.240, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.220, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.200, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.180, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.160, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.140, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.120, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.100, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.080, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.060, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.040, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.020, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + -0.000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, + 0.020,-0.3700,-0.0477, 0.0000, 0.0000, 0.0000,-0.0024,-0.0185,-0.0161, + 0.040,-0.3700,-0.0485, 0.0000, 0.0000, 0.0000,-0.0024,-0.0185,-0.0161, + 0.060,-0.3700,-0.0493, 0.0000, 0.0000, 0.0000,-0.0025,-0.0185,-0.0160, + 0.080,-0.3700,-0.0500, 0.0000, 0.0000, 0.0000,-0.0025,-0.0185,-0.0160, + 0.100,-0.3700,-0.0506, 0.0000, 0.0000, 0.0000,-0.0025,-0.0185,-0.0160, + 0.120,-0.3700,-0.0511, 0.0000, 0.0000, 0.0000,-0.0026,-0.0185,-0.0159, + 0.140,-0.3700,-0.0516, 0.0000, 0.0000, 0.0000,-0.0026,-0.0185,-0.0159, + 0.160,-0.3700,-0.0520, 0.0000, 0.0000, 0.0000,-0.0026,-0.0185,-0.0159, + 0.180,-0.3700,-0.0524, 0.0000, 0.0000, 0.0000,-0.0082,-0.0185,-0.0103, + 0.200,-0.3700,-0.0527, 0.0000, 0.0000, 0.0000,-0.0083,-0.0185,-0.0102, + 0.220,-0.3700,-0.0530, 0.0000, 0.0000, 0.0000,-0.0083,-0.0185,-0.0102, + 0.240,-0.3700,-0.0533, 0.0000, 0.0000, 0.0000,-0.0083,-0.0185,-0.0102, + 0.260,-0.3700,-0.0535, 0.0000, 0.0000, 0.0000,-0.0083,-0.0185,-0.0102, + 0.280,-0.3700,-0.0538, 0.0000, 0.0000, 0.0000,-0.0083,-0.0185,-0.0102, + 0.300,-0.3700,-0.0539, 0.0000, 0.0000, 0.0000,-0.0083,-0.0185,-0.0102, + 0.320,-0.3700,-0.0541, 0.0000, 0.0000, 0.0000,-0.0083,-0.0185,-0.0102, + 0.340,-0.3700,-0.0543, 0.0000, 0.0000, 0.0000,-0.0139,-0.0185,-0.0046, + 0.360,-0.3700,-0.0544, 0.0000, 0.0000, 0.0000,-0.0139,-0.0185,-0.0046, + 0.380,-0.3700,-0.0545, 0.0000, 0.0000, 0.0000,-0.0139,-0.0185,-0.0046, + 0.400,-0.3700,-0.0546, 0.0000, 0.0000, 0.0000,-0.0139,-0.0185,-0.0046, + 0.420,-0.3700,-0.0547, 0.0000, 0.0000, 0.0000,-0.0139,-0.0185,-0.0046, + 0.440,-0.3700,-0.0548, 0.0000, 0.0000, 0.0000,-0.0139,-0.0185,-0.0046, + 0.460,-0.3700,-0.0549, 0.0000, 0.0000, 0.0000,-0.0139,-0.0185,-0.0046, + 0.480,-0.3700,-0.0550, 0.0000, 0.0000, 0.0000,-0.0139,-0.0185,-0.0046, + 0.500,-0.3700,-0.0550, 0.0000, 0.0000, 0.0000,-0.0195,-0.0185, 0.0010, + 0.520,-0.3700,-0.0551, 0.0000, 0.0000, 0.0000,-0.0195,-0.0185, 0.0010, + 0.540,-0.3700,-0.0551, 0.0000, 0.0000, 0.0000,-0.0195,-0.0185, 0.0010, + 0.560,-0.3700,-0.0552, 0.0000, 0.0000, 0.0000,-0.0195,-0.0185, 0.0010, + 0.580,-0.3700,-0.0552, 0.0000, 0.0000, 0.0000,-0.0195,-0.0185, 0.0010, + 0.600,-0.3700,-0.0552, 0.0000, 0.0000, 0.0000,-0.0195,-0.0185, 0.0010, + 0.620,-0.3700,-0.0553, 0.0000, 0.0000, 0.0000,-0.0195,-0.0185, 0.0010, + 0.640,-0.3700,-0.0553, 0.0000, 0.0000, 0.0000,-0.0195,-0.0185, 0.0010, + 0.660,-0.3700,-0.0553, 0.0000, 0.0000, 0.0000,-0.0251,-0.0185, 0.0066, + 0.680,-0.3700,-0.0553, 0.0000, 0.0000, 0.0000,-0.0251,-0.0185, 0.0066, + 0.700,-0.3700,-0.0554, 0.0000, 0.0000, 0.0000,-0.0251,-0.0185, 0.0066, + 0.720,-0.3700,-0.0554, 0.0000, 0.0000, 0.0000,-0.0251,-0.0396,-0.0146, + 0.740,-0.3700,-0.0554, 0.0000, 0.0000, 0.0000,-0.0251,-0.0555,-0.0304, + 0.760,-0.3700,-0.0554, 0.0000, 0.0000, 0.0000,-0.0250,-0.0555,-0.0305, + 0.780,-0.3700,-0.0554, 0.0000, 0.0000, 0.0000,-0.0250,-0.0555,-0.0305, + 0.800,-0.3700,-0.0554, 0.0000, 0.0000, 0.0000,-0.0250,-0.0555,-0.0305, + 0.820,-0.3700,-0.0554,-0.0563, 0.0000, 0.0000,-0.0307,-0.0555,-0.0248, + 0.840,-0.3700,-0.0554,-0.0562, 0.0000, 0.0000,-0.0306,-0.0555,-0.0249, + 0.860,-0.3700,-0.0555,-0.0561, 0.0000, 0.0000,-0.0306,-0.0555,-0.0249, + 0.880,-0.3700,-0.0555,-0.0561, 0.0000, 0.0000,-0.0306,-0.0555,-0.0249, + 0.900,-0.3700,-0.0555,-0.0560, 0.0000, 0.0000,-0.0306,-0.0555,-0.0249, + 0.920,-0.3700,-0.0555,-0.0560, 0.0000, 0.0000,-0.0306,-0.0555,-0.0249, + 0.940,-0.3700,-0.0555,-0.0559, 0.0000, 0.0000,-0.0306,-0.0555,-0.0249, + 0.960,-0.3700,-0.0555,-0.0559, 0.0000, 0.0000,-0.0306,-0.0555,-0.0249, + 0.980,-0.3700,-0.0555,-0.0558, 0.0000, 0.0000,-0.0362,-0.0555,-0.0193, + 1.000,-0.3700,-0.0555,-0.0558, 0.0000, 0.0000,-0.0362,-0.0555,-0.0193, + 1.020,-0.3700,-0.0555,-0.0558, 0.0000, 0.0000,-0.0362,-0.0555,-0.0193, + 1.040,-0.3700,-0.0555,-0.0557, 0.0000, 0.0000,-0.0362,-0.0555,-0.0193, + 1.060,-0.3700,-0.0555,-0.0557, 0.0000, 0.0000,-0.0362,-0.0555,-0.0193, + 1.080,-0.3700,-0.0555,-0.0557, 0.0000, 0.0000,-0.0362,-0.0555,-0.0193, + 1.100,-0.3700,-0.0555,-0.0557, 0.0000, 0.0000,-0.0361,-0.0555,-0.0194, + 1.120,-0.3700,-0.0555,-0.0557, 0.0000, 0.0000,-0.0361,-0.0555,-0.0194, + 1.140,-0.3700,-0.0555,-0.0556, 0.0000, 0.0000,-0.0418,-0.0555,-0.0137, + 1.160,-0.3700,-0.0555,-0.0556, 0.0000, 0.0000,-0.0418,-0.0555,-0.0137, + 1.180,-0.3700,-0.0555,-0.0556, 0.0000, 0.0000,-0.0417,-0.0555,-0.0138, + 1.200,-0.3700,-0.0555,-0.0556, 0.0000, 0.0000,-0.0417,-0.0555,-0.0138, + 1.220,-0.3700,-0.0555,-0.0556, 0.0000, 0.0000,-0.0417,-0.0555,-0.0138, + 1.240,-0.3700,-0.0555,-0.0556, 0.0000, 0.0000,-0.0417,-0.0555,-0.0138, + 1.260,-0.3700,-0.0555,-0.0556, 0.0000, 0.0000,-0.0417,-0.0555,-0.0138, + 1.280,-0.3700,-0.0555,-0.0556, 0.0000, 0.0000,-0.0417,-0.0555,-0.0138, + 1.300,-0.3700,-0.0555,-0.0556, 0.0000, 0.0000,-0.0473,-0.0555,-0.0082, + 1.320,-0.3700,-0.0555,-0.0556, 0.0000, 0.0000,-0.0473,-0.0555,-0.0082, + 1.340,-0.3700,-0.0555,-0.0556, 0.0000, 0.0000,-0.0473,-0.0555,-0.0082, + 1.360,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0473,-0.0555,-0.0082, + 1.380,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0473,-0.0555,-0.0082, + 1.400,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0473,-0.0555,-0.0082, + 1.420,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0473,-0.0555,-0.0082, + 1.440,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0472,-0.0925,-0.0453, + 1.460,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0529,-0.0925,-0.0396, + 1.480,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0529,-0.0925,-0.0396, + 1.500,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0528,-0.0925,-0.0397, + 1.520,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0528,-0.0925,-0.0397, + 1.540,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0528,-0.0925,-0.0397, + 1.560,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0528,-0.0925,-0.0397, + 1.580,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0528,-0.0925,-0.0397, + 1.600,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0528,-0.0925,-0.0397, + 1.620,-0.3700,-0.0555,-0.0555, 0.0000, 0.0000,-0.0528,-0.0925,-0.0397, + 1.640,-0.3700,-0.0555,-0.0555,-0.0110, 0.0000,-0.0533,-0.0925,-0.0392, + 1.660,-0.3700,-0.0555,-0.0555,-0.0107, 0.0000,-0.0533,-0.0925,-0.0392, + 1.680,-0.3700,-0.0555,-0.0555,-0.0106, 0.0000,-0.0533,-0.0925,-0.0392, + 1.700,-0.3700,-0.0555,-0.0555,-0.0105, 0.0000,-0.0533,-0.0925,-0.0392, + 1.720,-0.3700,-0.0555,-0.0555,-0.0105, 0.0000,-0.0533,-0.0925,-0.0392, + 1.740,-0.3700,-0.0555,-0.0555,-0.0105, 0.0000,-0.0533,-0.0925,-0.0392, + 1.760,-0.3700,-0.0555,-0.0555,-0.0105, 0.0000,-0.0533,-0.0925,-0.0392, + 1.780,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0533,-0.0925,-0.0392, + 1.800,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0483,-0.0925,-0.0442, + 1.820,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0486,-0.0925,-0.0439, + 1.840,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0487,-0.0925,-0.0438, + 1.860,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0487,-0.0925,-0.0438, + 1.880,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0487,-0.0925,-0.0438, + 1.900,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0487,-0.0925,-0.0438, + 1.920,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0488,-0.0925,-0.0437, + 1.940,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0488,-0.0925,-0.0437, + 1.960,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0438,-0.0925,-0.0487, + 1.980,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0440,-0.0925,-0.0485, + 2.000,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0442,-0.0925,-0.0483, + 2.020,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0442,-0.0925,-0.0483, + 2.040,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0442,-0.0925,-0.0483, + 2.060,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0442,-0.0925,-0.0483, + 2.080,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0442,-0.0925,-0.0483, + 2.100,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0442,-0.0925,-0.0483, + 2.120,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0393,-0.0925,-0.0532, + 2.140,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0395,-0.0925,-0.0530, + 2.160,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0396,-0.1295,-0.0899, + 2.180,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0397,-0.1295,-0.0898, + 2.200,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0397,-0.1295,-0.0898, + 2.220,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0397,-0.1295,-0.0898, + 2.240,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0397,-0.1295,-0.0898, + 2.260,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0397,-0.1295,-0.0898, + 2.280,-0.3700,-0.0555,-0.0555,-0.0104, 0.0000,-0.0348,-0.1295,-0.0947, + 2.300,-0.3700,-0.0555,-0.0555,-0.0103, 0.0000,-0.0350,-0.1295,-0.0945, + 2.320,-0.3700,-0.0555,-0.0555,-0.0103, 0.0000,-0.0351,-0.1295,-0.0944, + 2.340,-0.3700,-0.0555,-0.0555,-0.0103, 0.0000,-0.0352,-0.1295,-0.0943, + 2.360,-0.3700,-0.0555,-0.0555,-0.0103, 0.0000,-0.0352,-0.1295,-0.0943, + 2.380,-0.3700,-0.0555,-0.0555,-0.0103, 0.0000,-0.0352,-0.1295,-0.0943, + 2.400,-0.3700,-0.0555,-0.0555,-0.0103, 0.0000,-0.0352,-0.1295,-0.0943, + 2.420,-0.3700,-0.0555,-0.0555,-0.0103, 0.0000,-0.0352,-0.1295,-0.0943, + 2.440,-0.3700,-0.0555,-0.0060,-0.0103, 0.0000,-0.0302,-0.1295,-0.0993, + 2.460,-0.3700,-0.0555,-0.0085,-0.0103, 0.0000,-0.0305,-0.1295,-0.0990, + 2.480,-0.3700,-0.0555,-0.0096,-0.0103, 0.0000,-0.0306,-0.1295,-0.0989, + 2.500,-0.3700,-0.0555,-0.0100,-0.0103, 0.0000,-0.0306,-0.1295,-0.0989, + 2.520,-0.3700,-0.0555,-0.0102,-0.0103, 0.0000,-0.0307,-0.1295,-0.0988, + 2.540,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0307,-0.1295,-0.0988, + 2.560,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0307,-0.1295,-0.0988, + 2.580,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0307,-0.1295,-0.0988, + 2.600,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0257,-0.1295,-0.1038, + 2.620,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0260,-0.1295,-0.1035, + 2.640,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0261,-0.1295,-0.1034, + 2.660,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0261,-0.1295,-0.1034, + 2.680,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0261,-0.1295,-0.1034, + 2.700,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0262,-0.1295,-0.1033, + 2.720,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0262,-0.1295,-0.1033, + 2.740,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0262,-0.1295,-0.1033, + 2.760,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0212,-0.1295,-0.1083, + 2.780,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0215,-0.1295,-0.1080, + 2.800,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0216,-0.1295,-0.1079, + 2.820,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0216,-0.1295,-0.1079, + 2.840,-0.3700,-0.0555,-0.0104,-0.0103, 0.0000,-0.0216,-0.1295,-0.1079, + 2.860,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0216,-0.1400,-0.1184, + 2.880,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0216,-0.1665,-0.1449, + 2.900,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0216,-0.1665,-0.1449, + 2.920,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0167,-0.1665,-0.1498, + 2.940,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0169,-0.1665,-0.1496, + 2.960,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0170,-0.1665,-0.1495, + 2.980,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0171,-0.1665,-0.1494, + 3.000,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0171,-0.1665,-0.1494, + 3.020,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0171,-0.1665,-0.1494, + 3.040,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0171,-0.1665,-0.1494, + 3.060,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0171,-0.1665,-0.1494, + 3.080,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0122,-0.1665,-0.1543, + 3.100,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0124,-0.1665,-0.1541, + 3.120,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0125,-0.1665,-0.1540, + 3.140,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0126,-0.1665,-0.1539, + 3.160,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0126,-0.1665,-0.1539, + 3.180,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0126,-0.1665,-0.1539, + 3.200,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0126,-0.1665,-0.1539, + 3.220,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0126,-0.1665,-0.1539, + 3.240,-0.3700,-0.0555,-0.0103,-0.0103, 0.0000,-0.0126,-0.1665,-0.1539, + 3.260,-0.3700, 0.0284,-0.0103,-0.0103, 0.0000,-0.0084,-0.1665,-0.1581, + 3.280,-0.3700, 0.0265,-0.0103,-0.0103, 0.0000,-0.0085,-0.1665,-0.1580, + 3.300,-0.3700, 0.0258,-0.0103,-0.0103, 0.0000,-0.0085,-0.1665,-0.1580, + 3.320,-0.3700, 0.0257,-0.0103,-0.0103, 0.0000,-0.0085,-0.1665,-0.1580, + 3.340,-0.3700, 0.0258,-0.0103,-0.0103, 0.0000,-0.0085,-0.1665,-0.1580, + 3.360,-0.3700, 0.0260,-0.0103,-0.0103, 0.0000,-0.0085,-0.1665,-0.1580, + 3.380,-0.3700, 0.0261,-0.0103,-0.0103, 0.0000,-0.0085,-0.1665,-0.1580, + 3.400,-0.3700, 0.0263,-0.0103,-0.0103, 0.0000,-0.0085,-0.1665,-0.1580, + 3.420,-0.3700, 0.0265,-0.0103,-0.0103, 0.0000,-0.0042,-0.1665,-0.1623, + 3.440,-0.3700, 0.0266,-0.0103,-0.0103, 0.0000,-0.0045,-0.1665,-0.1620, + 3.460,-0.3700, 0.0268,-0.0103,-0.0103, 0.0000,-0.0046,-0.1665,-0.1619, + 3.480,-0.3700, 0.0269,-0.0103,-0.0103, 0.0000,-0.0046,-0.1665,-0.1619, + 3.500,-0.3700, 0.0270,-0.0103,-0.0103, 0.0000,-0.0046,-0.1665,-0.1619, + 3.520,-0.3700, 0.0271,-0.0103,-0.0103, 0.0000,-0.0046,-0.1665,-0.1619, + 3.540,-0.3700, 0.0272,-0.0103,-0.0103, 0.0000,-0.0046,-0.1665,-0.1619, + 3.560,-0.3700, 0.0272,-0.0103,-0.0103, 0.0000,-0.0046,-0.1665,-0.1619, + 3.580,-0.3700, 0.0273,-0.0103,-0.0103, 0.0000,-0.0004,-0.1982,-0.1978, + 3.600,-0.3700, 0.0274,-0.0103,-0.0103, 0.0000,-0.0006,-0.2035,-0.2029, + 3.620,-0.3700, 0.0274,-0.0103,-0.0103, 0.0000,-0.0007,-0.2035,-0.2028, + 3.640,-0.3700, 0.0275,-0.0103,-0.0103, 0.0000,-0.0007,-0.2035,-0.2028, + 3.660,-0.3700, 0.0275,-0.0103,-0.0103, 0.0000,-0.0008,-0.2035,-0.2027, + 3.680,-0.3700, 0.0276,-0.0103,-0.0103, 0.0000,-0.0008,-0.2035,-0.2027, + 3.700,-0.3700, 0.0276,-0.0103,-0.0103, 0.0000,-0.0008,-0.2035,-0.2027, + 3.720,-0.3700, 0.0276,-0.0103,-0.0103, 0.0000,-0.0008,-0.2035,-0.2027, + 3.740,-0.3700, 0.0277,-0.0103,-0.0103, 0.0000, 0.0035,-0.2035,-0.2070, + 3.760,-0.3700, 0.0277,-0.0103,-0.0103, 0.0000, 0.0032,-0.2035,-0.2067, + 3.780,-0.3700, 0.0277,-0.0103,-0.0103, 0.0000, 0.0031,-0.2035,-0.2066, + 3.800,-0.3700, 0.0277,-0.0103,-0.0103, 0.0000, 0.0031,-0.2035,-0.2066, + 3.820,-0.3700, 0.0277,-0.0103,-0.0103, 0.0000, 0.0031,-0.2035,-0.2066, + 3.840,-0.3700, 0.0278,-0.0103,-0.0103, 0.0000, 0.0031,-0.2035,-0.2066, + 3.860,-0.3700, 0.0278,-0.0103,-0.0103, 0.0000, 0.0031,-0.2035,-0.2066, + 3.880,-0.3700, 0.0278,-0.0103,-0.0103, 0.0000, 0.0031,-0.2035,-0.2066, + 3.900,-0.3700, 0.0278,-0.0103,-0.0103, 0.0000, 0.0073,-0.2035,-0.2108, + 3.920,-0.3700, 0.0278,-0.0103,-0.0103, 0.0000, 0.0071,-0.2035,-0.2106, + 3.940,-0.3700, 0.0278,-0.0103,-0.0103, 0.0000, 0.0070,-0.2035,-0.2105, + 3.960,-0.3700, 0.0278,-0.0103,-0.0103, 0.0000, 0.0069,-0.2035,-0.2104, + 3.980,-0.3700, 0.0278,-0.0103,-0.0103, 0.0000, 0.0069,-0.2035,-0.2104, + 4.000,-0.3700, 0.0278,-0.0103,-0.0103, 0.0000, 0.0069,-0.2035,-0.2104, + 4.020,-0.3700, 0.0278,-0.0103,-0.0103, 0.0000, 0.0069,-0.2035,-0.2104, + 4.040,-0.3700, 0.0279,-0.0103,-0.0103, 0.0000, 0.0069,-0.2035,-0.2104, + 4.060,-0.3700, 0.0279, 0.0323,-0.0103, 0.0000, 0.0111,-0.2035,-0.2146, + 4.080,-0.3700, 0.0279, 0.0299,-0.0103, 0.0000, 0.0109,-0.2035,-0.2144, + 4.100,-0.3700, 0.0279, 0.0289,-0.0103, 0.0000, 0.0108,-0.2035,-0.2143, + 4.120,-0.3700, 0.0279, 0.0284,-0.0103, 0.0000, 0.0107,-0.2035,-0.2142, + 4.140,-0.3700, 0.0279, 0.0282,-0.0103, 0.0000, 0.0107,-0.2035,-0.2142, + 4.160,-0.3700, 0.0279, 0.0281,-0.0103, 0.0000, 0.0107,-0.2035,-0.2142, + 4.180,-0.3700, 0.0279, 0.0281,-0.0103, 0.0000, 0.0107,-0.2035,-0.2142, + 4.200,-0.3700, 0.0279, 0.0280,-0.0103, 0.0000, 0.0107,-0.2035,-0.2142, + 4.220,-0.3700, 0.0279, 0.0280,-0.0103, 0.0000, 0.0150,-0.2035,-0.2185, + 4.240,-0.3700, 0.0279, 0.0280,-0.0103, 0.0000, 0.0147,-0.2035,-0.2182, + 4.260,-0.3700, 0.0279, 0.0280,-0.0103, 0.0000, 0.0146,-0.2035,-0.2181, + 4.280,-0.3700, 0.0279, 0.0280,-0.0103, 0.0000, 0.0146,-0.2035,-0.2181, + 4.300,-0.3700, 0.0279, 0.0280,-0.0103, 0.0000, 0.0146,-0.2405,-0.2551, + 4.320,-0.3700, 0.0279, 0.0280,-0.0103, 0.0000, 0.0145,-0.2405,-0.2550, + 4.340,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0145,-0.2405,-0.2550, + 4.360,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0145,-0.2405,-0.2550, + 4.380,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0188,-0.2405,-0.2593, + 4.400,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0186,-0.2405,-0.2591, + 4.420,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0184,-0.2405,-0.2589, + 4.440,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0184,-0.2405,-0.2589, + 4.460,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0184,-0.2405,-0.2589, + 4.480,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0184,-0.2405,-0.2589, + 4.500,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0184,-0.2405,-0.2589, + 4.520,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0184,-0.2405,-0.2589, + 4.540,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0226,-0.2405,-0.2631, + 4.560,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0224,-0.2405,-0.2629, + 4.580,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0223,-0.2405,-0.2628, + 4.600,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0222,-0.2405,-0.2627, + 4.620,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0222,-0.2405,-0.2627, + 4.640,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0222,-0.2405,-0.2627, + 4.660,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0222,-0.2405,-0.2627, + 4.680,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0222,-0.2405,-0.2627, + 4.700,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0264,-0.2405,-0.2669, + 4.720,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0262,-0.2405,-0.2667, + 4.740,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0261,-0.2405,-0.2666, + 4.760,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0260,-0.2405,-0.2665, + 4.780,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0260,-0.2405,-0.2665, + 4.800,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0260,-0.2405,-0.2665, + 4.820,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0260,-0.2405,-0.2665, + 4.840,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0260,-0.2405,-0.2665, + 4.860,-0.3700, 0.0279, 0.0279,-0.0103, 0.0000, 0.0260,-0.2405,-0.2665, + 4.880,-0.3700, 0.0279, 0.0279, 0.0001, 0.0000, 0.0265,-0.2405,-0.2670, + 4.900,-0.3700, 0.0279, 0.0279,-0.0006, 0.0000, 0.0265,-0.2405,-0.2670, + 4.920,-0.3700, 0.0279, 0.0279,-0.0007, 0.0000, 0.0265,-0.2405,-0.2670, + 4.940,-0.3700, 0.0279, 0.0279,-0.0010, 0.0000, 0.0265,-0.2405,-0.2670, + 4.960,-0.3700, 0.0279, 0.0279,-0.0010, 0.0000, 0.0265,-0.2405,-0.2670, + 4.980,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0265,-0.2405,-0.2670, + 5.000,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0265,-0.2405,-0.2670, + 5.020,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0265,-0.2775,-0.3040, + 5.040,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0266,-0.2775,-0.3041, + 5.060,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0242,-0.2775,-0.3017, + 5.080,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0243,-0.2775,-0.3018, + 5.100,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0237,-0.2775,-0.3012, + 5.120,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0237,-0.2775,-0.3012, + 5.140,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0236,-0.2775,-0.3011, + 5.160,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0236,-0.2775,-0.3011, + 5.180,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0235,-0.2775,-0.3010, + 5.200,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0237,-0.2775,-0.3012, + 5.220,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0213,-0.2775,-0.2988, + 5.240,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0214,-0.2775,-0.2989, + 5.260,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0208,-0.2775,-0.2983, + 5.280,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0208,-0.2775,-0.2983, + 5.300,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0207,-0.2775,-0.2982, + 5.320,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0207,-0.2775,-0.2982, + 5.340,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0206,-0.2775,-0.2981, + 5.360,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0208,-0.2775,-0.2983, + 5.380,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0184,-0.2775,-0.2959, + 5.400,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0185,-0.2775,-0.2960, + 5.420,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0179,-0.2775,-0.2954, + 5.440,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0179,-0.2775,-0.2954, + 5.460,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0177,-0.2775,-0.2952, + 5.480,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0178,-0.2775,-0.2953, + 5.500,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0177,-0.2775,-0.2952, + 5.520,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0179,-0.2775,-0.2954, + 5.540,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0155,-0.2775,-0.2930, + 5.560,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0156,-0.2775,-0.2931, + 5.580,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0150,-0.2775,-0.2925, + 5.600,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0150,-0.2775,-0.2925, + 5.620,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0148,-0.2775,-0.2923, + 5.640,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0149,-0.2775,-0.2924, + 5.660,-0.3700, 0.0279, 0.0279,-0.0011, 0.0000, 0.0148,-0.2775,-0.2923, + 5.680,-0.3700, 0.0279, 0.0291,-0.0011, 0.0000, 0.0150,-0.2775,-0.2925, + 5.700,-0.3700, 0.0279, 0.0054,-0.0011, 0.0000, 0.0126,-0.2775,-0.2901, + 5.720,-0.3700, 0.0279, 0.0065,-0.0011, 0.0000, 0.0127,-0.2986,-0.3113, + 5.740,-0.3700, 0.0279, 0.0001,-0.0011, 0.0000, 0.0121,-0.3145,-0.3266, + 5.760,-0.3700, 0.0279, 0.0002,-0.0011, 0.0000, 0.0121,-0.3145,-0.3266, + 5.780,-0.3700, 0.0279,-0.0010,-0.0011, 0.0000, 0.0119,-0.3145,-0.3264, + 5.800,-0.3700, 0.0279,-0.0008,-0.0011, 0.0000, 0.0120,-0.3145,-0.3265, + 5.820,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0119,-0.3145,-0.3264, + 5.840,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0121,-0.3145,-0.3266, + 5.860,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0097,-0.3145,-0.3242, + 5.880,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0098,-0.3145,-0.3243, + 5.900,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0092,-0.3145,-0.3237, + 5.920,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0092,-0.3145,-0.3237, + 5.940,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0090,-0.3145,-0.3235, + 5.960,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0091,-0.3145,-0.3236, + 5.980,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0090,-0.3145,-0.3235, + 6.000,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0091,-0.3145,-0.3236, + 6.020,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0068,-0.3145,-0.3213, + 6.040,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0069,-0.3145,-0.3214, + 6.060,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0062,-0.3145,-0.3207, + 6.080,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0063,-0.3145,-0.3208, + 6.100,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0061,-0.3145,-0.3206, + 6.120,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0062,-0.3145,-0.3207, + 6.140,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0061,-0.3145,-0.3206, + 6.160,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0062,-0.3145,-0.3207, + 6.180,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0039,-0.3145,-0.3184, + 6.200,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0040,-0.3145,-0.3185, + 6.220,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0033,-0.3145,-0.3178, + 6.240,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0034,-0.3145,-0.3179, + 6.260,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0032,-0.3145,-0.3177, + 6.280,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0032,-0.3145,-0.3177, + 6.300,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0032,-0.3145,-0.3177, + 6.320,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0033,-0.3145,-0.3178, + 6.340,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0010,-0.3145,-0.3155, + 6.360,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0011,-0.3145,-0.3156, + 6.380,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0004,-0.3145,-0.3149, + 6.400,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0005,-0.3145,-0.3150, + 6.420,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0003,-0.3145,-0.3148, + 6.440,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0003,-0.3515,-0.3518, + 6.460,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0003,-0.3515,-0.3518, + 6.480,-0.3700, 0.0279,-0.0011,-0.0011, 0.0000, 0.0003,-0.3515,-0.3518, + 6.500,-0.3700, 0.0292,-0.0011,-0.0011, 0.0000, 0.0004,-0.3515,-0.3519, + 6.520,-0.3700,-0.0061,-0.0011,-0.0011, 0.0000,-0.0014,-0.3515,-0.3501, + 6.540,-0.3700,-0.0057,-0.0011,-0.0011, 0.0000,-0.0014,-0.3515,-0.3501, + 6.560,-0.3700,-0.0154,-0.0011,-0.0011, 0.0000,-0.0018,-0.3515,-0.3497, + 6.580,-0.3700,-0.0161,-0.0011,-0.0011, 0.0000,-0.0019,-0.3515,-0.3496, + 6.600,-0.3700,-0.0183,-0.0011,-0.0011, 0.0000,-0.0020,-0.3515,-0.3495, + 6.620,-0.3700,-0.0189,-0.0011,-0.0011, 0.0000,-0.0020,-0.3515,-0.3495, + 6.640,-0.3700,-0.0199,-0.0011,-0.0011, 0.0000,-0.0021,-0.3515,-0.3494, + 6.660,-0.3700,-0.0204,-0.0011,-0.0011, 0.0000,-0.0020,-0.3515,-0.3495, + 6.680,-0.3700,-0.0211,-0.0011,-0.0011, 0.0000,-0.0041,-0.3515,-0.3474, + 6.700,-0.3700,-0.0216,-0.0011,-0.0011, 0.0000,-0.0040,-0.3515,-0.3475, + 6.720,-0.3700,-0.0221,-0.0011,-0.0011, 0.0000,-0.0046,-0.3515,-0.3469, + 6.740,-0.3700,-0.0225,-0.0011,-0.0011, 0.0000,-0.0046,-0.3515,-0.3469, + 6.760,-0.3700,-0.0228,-0.0011,-0.0011, 0.0000,-0.0047,-0.3515,-0.3468, + 6.780,-0.3700,-0.0231,-0.0011,-0.0011, 0.0000,-0.0047,-0.3515,-0.3468, + 6.800,-0.3700,-0.0234,-0.0011,-0.0011, 0.0000,-0.0048,-0.3515,-0.3467, + 6.820,-0.3700,-0.0237,-0.0011,-0.0011, 0.0000,-0.0047,-0.3515,-0.3468, + 6.840,-0.3700,-0.0239,-0.0011,-0.0011, 0.0000,-0.0068,-0.3515,-0.3447, + 6.860,-0.3700,-0.0241,-0.0011,-0.0011, 0.0000,-0.0067,-0.3515,-0.3448, + 6.880,-0.3700,-0.0243,-0.0011,-0.0011, 0.0000,-0.0072,-0.3515,-0.3443, + 6.900,-0.3700,-0.0245,-0.0011,-0.0011, 0.0000,-0.0072,-0.3515,-0.3443, + 6.920,-0.3700,-0.0246,-0.0011,-0.0011, 0.0000,-0.0073,-0.3515,-0.3442, + 6.940,-0.3700,-0.0247,-0.0011,-0.0011, 0.0000,-0.0073,-0.3515,-0.3442, + 6.960,-0.3700,-0.0249,-0.0011,-0.0011, 0.0000,-0.0073,-0.3515,-0.3442, + 6.980,-0.3700,-0.0250,-0.0011,-0.0011, 0.0000,-0.0072,-0.3515,-0.3443, + 7.000,-0.3700,-0.0251,-0.0011,-0.0011, 0.0000,-0.0093,-0.3515,-0.3422, + 7.020,-0.3700,-0.0251,-0.0011,-0.0011, 0.0000,-0.0092,-0.3515,-0.3423, + 7.040,-0.3700,-0.0252,-0.0011,-0.0011, 0.0000,-0.0098,-0.3515,-0.3417, + 7.060,-0.3700,-0.0253,-0.0011,-0.0011, 0.0000,-0.0097,-0.3515,-0.3418, + 7.080,-0.3700,-0.0253,-0.0011,-0.0011, 0.0000,-0.0098,-0.3515,-0.3417, + 7.100,-0.3700,-0.0254,-0.0011,-0.0011, 0.0000,-0.0098,-0.3515,-0.3417, + 7.120,-0.3700,-0.0254,-0.0011,-0.0011, 0.0000,-0.0098,-0.3515,-0.3417, + 7.140,-0.3700,-0.0255,-0.0011,-0.0011, 0.0000,-0.0097,-0.3515,-0.3418, + 7.160,-0.3700,-0.0258,-0.0011,-0.2963,-0.3700,-0.0266,-0.3700,-0.3434, + 7.180,-0.3700,-0.0258,-0.0011,-0.2970,-0.3700,-0.0265,-0.3700,-0.3435, + 7.200,-0.3700,-0.0258,-0.0011,-0.2975,-0.3700,-0.0271,-0.3700,-0.3429, + 7.220,-0.3700,-0.0258,-0.0011,-0.2979,-0.3700,-0.0271,-0.3700,-0.3429, + 7.240,-0.3700,-0.0258,-0.0011,-0.2981,-0.3700,-0.0272,-0.3700,-0.3428, + 7.260,-0.3700,-0.0258,-0.0011,-0.2983,-0.3700,-0.0272,-0.3700,-0.3428, + 7.280,-0.3700,-0.0258,-0.0011,-0.2984,-0.3700,-0.0272,-0.3700,-0.3428, + 7.300,-0.3700,-0.0258,-0.0001,-0.2985,-0.3700,-0.0271,-0.3700,-0.3429, + 7.320,-0.3700,-0.0258,-0.0210,-0.2986,-0.3700,-0.0596,-0.3700,-0.3104, + 7.340,-0.3700,-0.0258,-0.0199,-0.2986,-0.3700,-0.0593,-0.3700,-0.3107, + 7.360,-0.3700,-0.0258,-0.0255,-0.2987,-0.3700,-0.0597,-0.3700,-0.3103, + 7.380,-0.3700,-0.0258,-0.0253,-0.2987,-0.3700,-0.0596,-0.3700,-0.3104, + 7.400,-0.3700,-0.0258,-0.0264,-0.2987,-0.3700,-0.0596,-0.3700,-0.3104, + 7.420,-0.3700,-0.0258,-0.0261,-0.2987,-0.3700,-0.0595,-0.3700,-0.3105, + 7.440,-0.3700,-0.0258,-0.0264,-0.2987,-0.3700,-0.0595,-0.3700,-0.3105, + 7.460,-0.3700,-0.0258,-0.0262,-0.2987,-0.3700,-0.0594,-0.3700,-0.3106, + 7.480,-0.3700,-0.0258,-0.0263,-0.2988,-0.3700,-0.0919,-0.3700,-0.2781, + 7.500,-0.3700,-0.0258,-0.0262,-0.2988,-0.3700,-0.0915,-0.3700,-0.2785, + 7.520,-0.3700,-0.0258,-0.0262,-0.2988,-0.3700,-0.0920,-0.3700,-0.2780, + 7.540,-0.3700,-0.0258,-0.0261,-0.2988,-0.3700,-0.0918,-0.3700,-0.2782, + 7.560,-0.3700,-0.0258,-0.0261,-0.2988,-0.3700,-0.0919,-0.3700,-0.2781, + 7.580,-0.3700,-0.0258,-0.0261,-0.2988,-0.3700,-0.0918,-0.3700,-0.2782, + 7.600,-0.3700,-0.0258,-0.0260,-0.2988,-0.3700,-0.0918,-0.3700,-0.2782, + 7.620,-0.3700,-0.0258,-0.0260,-0.2988,-0.3700,-0.0916,-0.3700,-0.2784, + 7.640,-0.3700,-0.0258,-0.0260,-0.2988,-0.3700,-0.1241,-0.3700,-0.2459, + 7.660,-0.3700,-0.0258,-0.0260,-0.2988,-0.3700,-0.1238,-0.3700,-0.2462, + 7.680,-0.3700,-0.0258,-0.0259,-0.2988,-0.3700,-0.1242,-0.3700,-0.2458, + 7.700,-0.3700,-0.0258,-0.0259,-0.2988,-0.3700,-0.1241,-0.3700,-0.2459, + 7.720,-0.3700,-0.0258,-0.0259,-0.2988,-0.3700,-0.1241,-0.3700,-0.2459, + 7.740,-0.3700,-0.0258,-0.0259,-0.2988,-0.3700,-0.1240,-0.3700,-0.2460, + 7.760,-0.3700,-0.0258,-0.0259,-0.2988,-0.3700,-0.1240,-0.3700,-0.2460, + 7.780,-0.3700,-0.0258,-0.0259,-0.2988,-0.3700,-0.1238,-0.3700,-0.2462, + 7.800,-0.3700,-0.0258,-0.0259,-0.2988,-0.3700,-0.1563,-0.3700,-0.2137, + 7.820,-0.3700,-0.0258,-0.0259,-0.2988,-0.3700,-0.1560,-0.3700,-0.2140, + 7.840,-0.3700,-0.0258,-0.0259,-0.2988,-0.3700,-0.1564,-0.3700,-0.2136, + 7.860,-0.3700,-0.0258,-0.0259,-0.2988,-0.3700,-0.1563,-0.3700,-0.2137, + 7.880,-0.3700,-0.0258,-0.0259,-0.2988,-0.3700,-0.1563,-0.3700,-0.2137, + 7.900,-0.3700,-0.0258,-0.0258,-0.2988,-0.3700,-0.1562,-0.3700,-0.2138, + 7.920,-0.3700,-0.0258,-0.0258,-0.2988,-0.3700,-0.1562,-0.3700,-0.2138, + 7.940,-0.3700,-0.0258,-0.0258,-0.2988,-0.3700,-0.1561,-0.3700,-0.2139, + 7.960,-0.3700,-0.0258,-0.3298,-0.2988,-0.3700,-0.1885,-0.3700,-0.1815, + 7.980,-0.3700,-0.0258,-0.3280,-0.2988,-0.3700,-0.1882,-0.3700,-0.1818, + 8.000,-0.3700,-0.0258,-0.3267,-0.2988,-0.3700,-0.1886,-0.3700,-0.1814, + 8.020,-0.3700,-0.0258,-0.3258,-0.2988,-0.3700,-0.1885,-0.3700,-0.1815, + 8.040,-0.3700,-0.0258,-0.3251,-0.2988,-0.3700,-0.1886,-0.3700,-0.1814, + 8.060,-0.3700,-0.0258,-0.3246,-0.2988,-0.3700,-0.1885,-0.3700,-0.1815, + 8.080,-0.3700,-0.0258,-0.3243,-0.2988,-0.3700,-0.1885,-0.3700,-0.1815, + 8.100,-0.3700,-0.0258,-0.3241,-0.2988,-0.3700,-0.1884,-0.3700,-0.1816, + 8.120,-0.3700,-0.0258,-0.3239,-0.2978,-0.3700,-0.2187,-0.3700,-0.1513, + 8.140,-0.3700,-0.0258,-0.3238,-0.3144,-0.3700,-0.2194,-0.3700,-0.1506, + 8.160,-0.3700,-0.0258,-0.3237,-0.3127,-0.3700,-0.2191,-0.3700,-0.1509, + 8.180,-0.3700,-0.0258,-0.3236,-0.3173,-0.3700,-0.2193,-0.3700,-0.1507, + 8.200,-0.3700,-0.0258,-0.3235,-0.3165,-0.3700,-0.2191,-0.3700,-0.1509, + 8.220,-0.3700,-0.0258,-0.3235,-0.3170,-0.3700,-0.2191,-0.3700,-0.1509, + 8.240,-0.3700,-0.0258,-0.3235,-0.3164,-0.3700,-0.2190,-0.3700,-0.1510, + 8.260,-0.3700,-0.0258,-0.3235,-0.3163,-0.3700,-0.2190,-0.3700,-0.1510, + 8.280,-0.3700,-0.0258,-0.3235,-0.3160,-0.3700,-0.2495,-0.3700,-0.1205, + 8.300,-0.3700,-0.0258,-0.3235,-0.3159,-0.3700,-0.2479,-0.3700,-0.1221, + 8.320,-0.3700,-0.0258,-0.3234,-0.3157,-0.3700,-0.2481,-0.3700,-0.1219, + 8.340,-0.3700,-0.0258,-0.3234,-0.3157,-0.3700,-0.2474,-0.3700,-0.1226, + 8.360,-0.3700,-0.0258,-0.3234,-0.3156,-0.3700,-0.2476,-0.3700,-0.1224, + 8.380,-0.3700,-0.0258,-0.3234,-0.3156,-0.3700,-0.2476,-0.3700,-0.1224, + 8.400,-0.3700,-0.0258,-0.3234,-0.3155,-0.3700,-0.2477,-0.3700,-0.1223, + 8.420,-0.3700,-0.0258,-0.3234,-0.3155,-0.3700,-0.2477,-0.3700,-0.1223, + 8.440,-0.3700,-0.0258,-0.3234,-0.3155,-0.3700,-0.2782,-0.3700,-0.0918, + 8.460,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.2767,-0.3700,-0.0933, + 8.480,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.2769,-0.3700,-0.0931, + 8.500,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.2763,-0.3700,-0.0937, + 8.520,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.2765,-0.3700,-0.0935, + 8.540,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.2765,-0.3700,-0.0935, + 8.560,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.2766,-0.3700,-0.0934, + 8.580,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.2766,-0.3700,-0.0934, + 8.600,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.3072,-0.3700,-0.0628, + 8.620,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.3056,-0.3700,-0.0644, + 8.640,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.3059,-0.3700,-0.0641, + 8.660,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.3053,-0.3700,-0.0647, + 8.680,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.3054,-0.3700,-0.0646, + 8.700,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.3054,-0.3700,-0.0646, + 8.720,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.3055,-0.3700,-0.0645, + 8.740,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.3056,-0.3700,-0.0644, + 8.760,-0.3700,-0.0258,-0.3234,-0.3154,-0.3700,-0.3057,-0.3700,-0.0643, + 8.780,-0.3700,-0.5278,-0.3234,-0.3153,-0.3700,-0.3295,-0.3700,-0.0405, + 8.800,-0.3700,-0.5267,-0.3234,-0.3153,-0.3700,-0.3298,-0.3700,-0.0402, + 8.820,-0.3700,-0.5259,-0.3234,-0.3153,-0.3700,-0.3292,-0.3700,-0.0408, + 8.840,-0.3700,-0.5254,-0.3234,-0.3153,-0.3700,-0.3294,-0.3700,-0.0406, + 8.860,-0.3700,-0.5250,-0.3234,-0.3153,-0.3700,-0.3294,-0.3700,-0.0406, + 8.880,-0.3700,-0.5247,-0.3234,-0.3153,-0.3700,-0.3296,-0.3700,-0.0404, + 8.900,-0.3700,-0.5245,-0.3234,-0.3153,-0.3700,-0.3296,-0.3700,-0.0404, + 8.920,-0.3700,-0.5244,-0.3244,-0.3153,-0.3700,-0.3298,-0.3700,-0.0402, + 8.940,-0.3700,-0.5243,-0.3106,-0.3153,-0.3700,-0.3491,-0.3700,-0.0209, + 8.960,-0.3700,-0.5242,-0.3138,-0.3153,-0.3700,-0.3493,-0.3700,-0.0207, + 8.980,-0.3700,-0.5242,-0.3087,-0.3153,-0.3700,-0.3487,-0.3700,-0.0213, + 9.000,-0.3700,-0.5241,-0.3110,-0.3153,-0.3700,-0.3488,-0.3700,-0.0212, + 9.020,-0.3700,-0.5241,-0.3112,-0.3153,-0.3700,-0.3488,-0.3700,-0.0212, + 9.040,-0.3700,-0.5241,-0.3127,-0.3153,-0.3700,-0.3489,-0.3700,-0.0211, + 9.060,-0.3700,-0.5241,-0.3132,-0.3153,-0.3700,-0.3489,-0.3700,-0.0211, + 9.080,-0.3700,-0.5241,-0.3140,-0.3153,-0.3700,-0.3491,-0.3700,-0.0209, + 9.100,-0.3700,-0.5241,-0.3143,-0.3153,-0.3700,-0.3684,-0.3700,-0.0016, + 9.120,-0.3700,-0.5241,-0.3147,-0.3153,-0.3700,-0.3686,-0.3700,-0.0014, + 9.140,-0.3700,-0.5241,-0.3149,-0.3153,-0.3700,-0.3680,-0.3700,-0.0020, + 9.160,-0.3700,-0.5241,-0.3150,-0.3153,-0.3700,-0.3681,-0.3700,-0.0019, + 9.180,-0.3700,-0.5241,-0.3151,-0.3153,-0.3700,-0.3681,-0.3700,-0.0019, + 9.200,-0.3700,-0.5241,-0.3152,-0.3153,-0.3700,-0.3682,-0.3700,-0.0018, + 9.220,-0.3700,-0.5241,-0.3152,-0.3153,-0.3700,-0.3682,-0.3700,-0.0018, + 9.240,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.3684,-0.3700,-0.0016, + 9.260,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.3877,-0.3700, 0.0177, + 9.280,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.3878,-0.3700, 0.0178, + 9.300,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.3872,-0.3700, 0.0172, + 9.320,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.3874,-0.3700, 0.0174, + 9.340,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.3873,-0.3700, 0.0173, + 9.360,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.3874,-0.3700, 0.0174, + 9.380,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.3875,-0.3700, 0.0175, + 9.400,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.3876,-0.3700, 0.0176, + 9.420,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.4069,-0.3700, 0.0369, + 9.440,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.4071,-0.3700, 0.0371, + 9.460,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.4065,-0.3700, 0.0365, + 9.480,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.4066,-0.3700, 0.0366, + 9.500,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.4066,-0.3700, 0.0366, + 9.520,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.4067,-0.3700, 0.0367, + 9.540,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.4067,-0.3700, 0.0367, + 9.560,-0.3700,-0.5241,-0.3153,-0.3153,-0.3700,-0.4069,-0.3700, 0.0369, + 9.580,-0.3700,-0.5241,-0.5220,-0.3153,-0.3700,-0.4262,-0.3700, 0.0562, + 9.600,-0.3700,-0.5241,-0.5203,-0.3153,-0.3700,-0.4264,-0.3700, 0.0564, + 9.620,-0.3700,-0.5241,-0.5191,-0.3153,-0.3700,-0.4257,-0.3700, 0.0557, + 9.640,-0.3700,-0.5241,-0.5183,-0.3153,-0.3700,-0.4259,-0.3700, 0.0559, + 9.660,-0.3700,-0.5241,-0.5176,-0.3153,-0.3700,-0.4259,-0.3700, 0.0559, + 9.680,-0.3700,-0.5241,-0.5172,-0.3153,-0.3700,-0.4260,-0.3700, 0.0560, + 9.700,-0.3700,-0.5241,-0.5169,-0.3153,-0.3700,-0.4260,-0.3700, 0.0560, + 9.720,-0.3700,-0.5241,-0.5166,-0.3153,-0.3700,-0.4260,-0.3700, 0.0560, + 9.740,-0.3700,-0.5251,-0.5165,-0.3153,-0.3700,-0.4468,-0.3700, 0.0768, + 9.760,-0.3700,-0.5083,-0.5163,-0.3153,-0.3700,-0.4458,-0.3700, 0.0758, + 9.780,-0.3700,-0.5110,-0.5162,-0.3153,-0.3700,-0.4458,-0.3700, 0.0758, + 9.800,-0.3700,-0.5050,-0.5162,-0.3153,-0.3700,-0.4454,-0.3700, 0.0754, + 9.820,-0.3700,-0.5068,-0.5161,-0.3153,-0.3700,-0.4455,-0.3700, 0.0755, + 9.840,-0.3700,-0.5064,-0.5161,-0.3153,-0.3700,-0.4454,-0.3700, 0.0754, + 9.860,-0.3700,-0.5076,-0.5161,-0.3153,-0.3700,-0.4454,-0.3700, 0.0754, + 9.880,-0.3700,-0.5079,-0.5161,-0.3153,-0.3700,-0.4454,-0.3700, 0.0754, + 9.900,-0.3700,-0.5085,-0.5161,-0.3153,-0.3700,-0.4662,-0.3700, 0.0962, + 9.920,-0.3700,-0.5088,-0.5160,-0.3153,-0.3700,-0.4649,-0.3700, 0.0949, + 9.940,-0.3700,-0.5091,-0.5160,-0.3153,-0.3700,-0.4650,-0.3700, 0.0950, + 9.960,-0.3700,-0.5092,-0.5160,-0.3153,-0.3700,-0.4645,-0.3700, 0.0945, + 9.980,-0.3700,-0.5094,-0.5160,-0.3153,-0.3700,-0.4647,-0.3700, 0.0947, + 10.000,-0.3700,-0.5095,-0.5160,-0.3153,-0.3700,-0.4646,-0.3700, 0.0946, + 10.020,-0.3700,-0.5095,-0.5160,-0.3153,-0.3700,-0.4648,-0.3700, 0.0948, + 10.040,-0.3700,-0.5096,-0.5160,-0.3153,-0.3700,-0.4648,-0.3700, 0.0948, + 10.060,-0.3700,-0.5096,-0.5160,-0.3153,-0.3700,-0.4856,-0.3700, 0.1156, + 10.080,-0.3700,-0.5096,-0.5160,-0.3153,-0.3700,-0.4843,-0.3700, 0.1143, + 10.100,-0.3700,-0.5097,-0.5160,-0.3153,-0.3700,-0.4845,-0.3700, 0.1145, + 10.120,-0.3700,-0.5097,-0.5160,-0.3153,-0.3700,-0.4839,-0.3700, 0.1139, + 10.140,-0.3700,-0.5097,-0.5160,-0.3153,-0.3700,-0.4841,-0.3700, 0.1141, + 10.160,-0.3700,-0.5097,-0.5160,-0.3153,-0.3700,-0.4841,-0.3700, 0.1141, + 10.180,-0.3700,-0.5097,-0.5160,-0.3153,-0.3700,-0.4842,-0.3700, 0.1142, + 10.200,-0.3700,-0.5097,-0.5160,-0.3153,-0.3700,-0.4842,-0.3700, 0.1142, + 10.220,-0.3700,-0.5097,-0.5160,-0.3153,-0.3700,-0.5050,-0.3700, 0.1350, + 10.240,-0.3700,-0.5097,-0.5160,-0.3153,-0.3700,-0.5037,-0.3700, 0.1337, + 10.260,-0.3700,-0.5097,-0.5160,-0.3153,-0.3700,-0.5039,-0.3700, 0.1339, + 10.280,-0.3700,-0.5097,-0.5160,-0.3153,-0.3700,-0.5034,-0.3700, 0.1334, + 10.300,-0.3700,-0.5098,-0.5160,-0.3153,-0.3700,-0.5036,-0.3700, 0.1336, + 10.320,-0.3700,-0.5098,-0.5160,-0.3153,-0.3700,-0.5035,-0.3700, 0.1335, + 10.340,-0.3700,-0.5098,-0.5160,-0.3153,-0.3700,-0.5036,-0.3700, 0.1336, + 10.360,-0.3700,-0.5098,-0.5160,-0.3153,-0.3700,-0.5037,-0.3700, 0.1337, + 10.380,-0.3700,-0.5098,-0.5160,-0.3153,-0.3700,-0.5038,-0.3700, 0.1338, + 10.400,-0.3700,-0.5098,-0.5160,-0.3838,-0.3700,-0.5061,-0.3700, 0.1361, + 10.420,-0.3700,-0.5098,-0.5160,-0.3824,-0.3700,-0.5063,-0.3700, 0.1363, + 10.440,-0.3700,-0.5098,-0.5160,-0.3817,-0.3700,-0.5059,-0.3700, 0.1359, + 10.460,-0.3700,-0.5098,-0.5160,-0.3814,-0.3700,-0.5061,-0.3700, 0.1361, + 10.480,-0.3700,-0.5098,-0.5160,-0.3813,-0.3700,-0.5061,-0.3700, 0.1361, + 10.500,-0.3700,-0.5098,-0.5160,-0.3812,-0.3700,-0.5062,-0.3700, 0.1362, + 10.520,-0.3700,-0.5098,-0.5160,-0.3812,-0.3700,-0.5063,-0.3700, 0.1363, + 10.540,-0.3700,-0.5098,-0.5168,-0.3811,-0.3700,-0.5064,-0.3700, 0.1364, + 10.560,-0.3700,-0.5098,-0.5051,-0.3811,-0.3700,-0.4909,-0.3700, 0.1209, + 10.580,-0.3700,-0.5098,-0.5080,-0.3811,-0.3700,-0.4921,-0.3700, 0.1221, + 10.600,-0.3700,-0.5098,-0.5036,-0.3811,-0.3700,-0.4920,-0.3700, 0.1220, + 10.620,-0.3700,-0.5098,-0.5058,-0.3811,-0.3700,-0.4922,-0.3700, 0.1222, + 10.640,-0.3700,-0.5098,-0.5060,-0.3811,-0.3700,-0.4922,-0.3700, 0.1222, + 10.660,-0.3700,-0.5098,-0.5074,-0.3811,-0.3700,-0.4923,-0.3700, 0.1223, + 10.680,-0.3700,-0.5098,-0.5079,-0.3811,-0.3700,-0.4923,-0.3700, 0.1223, + 10.700,-0.3700,-0.5098,-0.5086,-0.3811,-0.3700,-0.4924,-0.3700, 0.1224, + 10.720,-0.3700,-0.5098,-0.5089,-0.3811,-0.3700,-0.4769,-0.3700, 0.1069, + 10.740,-0.3700,-0.5098,-0.5092,-0.3811,-0.3700,-0.4780,-0.3700, 0.1080, + 10.760,-0.3700,-0.5098,-0.5094,-0.3811,-0.3700,-0.4779,-0.3700, 0.1079, + 10.780,-0.3700,-0.5098,-0.5095,-0.3811,-0.3700,-0.4782,-0.3700, 0.1082, + 10.800,-0.3700,-0.5098,-0.5096,-0.3811,-0.3700,-0.4781,-0.3700, 0.1081, + 10.820,-0.3700,-0.5098,-0.5097,-0.3811,-0.3700,-0.4782,-0.3700, 0.1082, + 10.840,-0.3700,-0.5098,-0.5097,-0.3811,-0.3700,-0.4782,-0.3700, 0.1082, + 10.860,-0.3700,-0.5098,-0.5097,-0.3811,-0.3700,-0.4783,-0.3700, 0.1083, + 10.880,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4628,-0.3700, 0.0928, + 10.900,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4639,-0.3700, 0.0939, + 10.920,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4638,-0.3700, 0.0938, + 10.940,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4640,-0.3700, 0.0940, + 10.960,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4640,-0.3700, 0.0940, + 10.980,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4641,-0.3700, 0.0941, + 11.000,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4641,-0.3700, 0.0941, + 11.020,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4642,-0.3700, 0.0942, + 11.040,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4487,-0.3700, 0.0787, + 11.060,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4498,-0.3700, 0.0798, + 11.080,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4496,-0.3700, 0.0796, + 11.100,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4499,-0.3700, 0.0799, + 11.120,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4499,-0.3700, 0.0799, + 11.140,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4500,-0.3700, 0.0800, + 11.160,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4500,-0.3700, 0.0800, + 11.180,-0.3700,-0.5098,-0.5098,-0.3811,-0.3700,-0.4501,-0.3700, 0.0801, + 11.200,-0.3700,-0.5098,-0.3663,-0.3811,-0.3700,-0.4346,-0.3700, 0.0646, + 11.220,-0.3700,-0.5098,-0.3744,-0.3811,-0.3700,-0.4357,-0.3700, 0.0657, + 11.240,-0.3700,-0.5098,-0.3774,-0.3811,-0.3700,-0.4355,-0.3700, 0.0655, + 11.260,-0.3700,-0.5098,-0.3780,-0.3811,-0.3700,-0.4358,-0.3700, 0.0658, + 11.280,-0.3700,-0.5098,-0.3777,-0.3811,-0.3700,-0.4358,-0.3700, 0.0658, + 11.300,-0.3700,-0.5098,-0.3771,-0.3811,-0.3700,-0.4359,-0.3700, 0.0659, + 11.320,-0.3700,-0.5098,-0.3766,-0.3811,-0.3700,-0.4359,-0.3700, 0.0659, + 11.340,-0.3700,-0.5098,-0.3761,-0.3811,-0.3700,-0.4359,-0.3700, 0.0659, + 11.360,-0.3700,-0.5098,-0.3758,-0.3816,-0.3700,-0.4216,-0.3700, 0.0516, + 11.380,-0.3700,-0.5098,-0.3755,-0.3779,-0.3700,-0.4222,-0.3700, 0.0522, + 11.400,-0.3700,-0.5098,-0.3753,-0.3788,-0.3700,-0.4225,-0.3700, 0.0525, + 11.420,-0.3700,-0.5098,-0.3752,-0.3769,-0.3700,-0.4225,-0.3700, 0.0525, + 11.440,-0.3700,-0.5098,-0.3751,-0.3782,-0.3700,-0.4225,-0.3700, 0.0525, + 11.460,-0.3700,-0.5098,-0.3750,-0.3780,-0.3700,-0.4225,-0.3700, 0.0525, + 11.480,-0.3700,-0.5098,-0.3750,-0.3787,-0.3700,-0.4224,-0.3700, 0.0524, + 11.500,-0.3700,-0.5098,-0.3749,-0.3787,-0.3700,-0.4224,-0.3700, 0.0524, + 11.520,-0.3700,-0.5098,-0.3749,-0.3789,-0.3700,-0.4077,-0.3700, 0.0377, + 11.540,-0.3700,-0.5098,-0.3749,-0.3789,-0.3700,-0.4089,-0.3700, 0.0389, + 11.560,-0.3700,-0.5098,-0.3749,-0.3790,-0.3700,-0.4091,-0.3700, 0.0391, + 11.580,-0.3700,-0.5098,-0.3749,-0.3789,-0.3700,-0.4104,-0.3700, 0.0404, + 11.600,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.4091,-0.3700, 0.0391, + 11.620,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.4094,-0.3700, 0.0394, + 11.640,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.4089,-0.3700, 0.0389, + 11.660,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.4090,-0.3700, 0.0390, + 11.680,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3943,-0.3700, 0.0243, + 11.700,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3957,-0.3700, 0.0257, + 11.720,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3959,-0.3700, 0.0259, + 11.740,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3972,-0.3700, 0.0272, + 11.760,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3959,-0.3700, 0.0259, + 11.780,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3962,-0.3700, 0.0262, + 11.800,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3958,-0.3700, 0.0258, + 11.820,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3959,-0.3700, 0.0259, + 11.840,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3812,-0.3700, 0.0112, + 11.860,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3826,-0.3700, 0.0126, + 11.880,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3828,-0.3700, 0.0128, + 11.900,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3841,-0.3700, 0.0141, + 11.920,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3828,-0.3700, 0.0128, + 11.940,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3831,-0.3700, 0.0131, + 11.960,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3827,-0.3700, 0.0127, + 11.980,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3829,-0.3700, 0.0129, + 12.000,-0.3700,-0.5098,-0.3748,-0.3790,-0.3700,-0.3825,-0.3700, 0.0125, + 12.020,-0.3700,-0.2951,-0.3748,-0.3790,-0.3700,-0.3723,-0.3700, 0.0023, + 12.040,-0.3700,-0.3030,-0.3748,-0.3790,-0.3700,-0.3726,-0.3700, 0.0026, + 12.060,-0.3700,-0.3062,-0.3748,-0.3790,-0.3700,-0.3740,-0.3700, 0.0040, + 12.080,-0.3700,-0.3069,-0.3748,-0.3790,-0.3700,-0.3728,-0.3700, 0.0028, + 12.100,-0.3700,-0.3067,-0.3748,-0.3790,-0.3700,-0.3732,-0.3700, 0.0032, + 12.120,-0.3700,-0.3062,-0.3748,-0.3790,-0.3700,-0.3728,-0.3700, 0.0028, + 12.140,-0.3700,-0.3056,-0.3748,-0.3790,-0.3700,-0.3729,-0.3700, 0.0029, + 12.160,-0.3700,-0.3051,-0.3719,-0.3790,-0.3700,-0.3726,-0.3700, 0.0026, + 12.180,-0.3700,-0.3047,-0.3763,-0.3790,-0.3700,-0.3652,-0.3700,-0.0048, + 12.200,-0.3700,-0.3043,-0.3752,-0.3790,-0.3700,-0.3658,-0.3700,-0.0042, + 12.220,-0.3700,-0.3041,-0.3872,-0.3790,-0.3700,-0.3672,-0.3700,-0.0028, + 12.240,-0.3700,-0.3038,-0.3745,-0.3790,-0.3700,-0.3660,-0.3700,-0.0040, + 12.260,-0.3700,-0.3037,-0.3781,-0.3790,-0.3700,-0.3664,-0.3700,-0.0036, + 12.280,-0.3700,-0.3035,-0.3744,-0.3790,-0.3700,-0.3660,-0.3700,-0.0040, + 12.300,-0.3700,-0.3034,-0.3761,-0.3790,-0.3700,-0.3661,-0.3700,-0.0039, + 12.320,-0.3700,-0.3033,-0.3758,-0.3790,-0.3700,-0.3658,-0.3700,-0.0042, + 12.340,-0.3700,-0.3032,-0.3770,-0.3790,-0.3700,-0.3583,-0.3700,-0.0117, + 12.360,-0.3700,-0.3031,-0.3772,-0.3790,-0.3700,-0.3589,-0.3700,-0.0111, + 12.380,-0.3700,-0.3030,-0.3779,-0.3790,-0.3700,-0.3604,-0.3700,-0.0096, + 12.400,-0.3700,-0.3030,-0.3781,-0.3790,-0.3700,-0.3592,-0.3700,-0.0108, + 12.420,-0.3700,-0.3029,-0.3784,-0.3790,-0.3700,-0.3595,-0.3700,-0.0105, + 12.440,-0.3700,-0.3029,-0.3786,-0.3790,-0.3700,-0.3591,-0.3700,-0.0109, + 12.460,-0.3700,-0.3029,-0.3787,-0.3790,-0.3700,-0.3593,-0.3700,-0.0107, + 12.480,-0.3700,-0.3028,-0.3788,-0.3790,-0.3700,-0.3589,-0.3700,-0.0111, + 12.500,-0.3700,-0.3028,-0.3788,-0.3790,-0.3700,-0.3515,-0.3700,-0.0185, + 12.520,-0.3700,-0.3028,-0.3789,-0.3790,-0.3700,-0.3521,-0.3700,-0.0179, + 12.540,-0.3700,-0.3027,-0.3789,-0.3790,-0.3700,-0.3536,-0.3700,-0.0164, + 12.560,-0.3700,-0.3027,-0.3789,-0.3790,-0.3700,-0.3524,-0.3700,-0.0176, + 12.580,-0.3700,-0.3027,-0.3790,-0.3790,-0.3700,-0.3527,-0.3700,-0.0173, + 12.600,-0.3700,-0.3027,-0.3790,-0.3790,-0.3700,-0.3523,-0.3700,-0.0177, + 12.620,-0.3700,-0.3027,-0.3790,-0.3790,-0.3700,-0.3525,-0.3700,-0.0175, + 12.640,-0.3700,-0.3027,-0.3790,-0.3790,-0.3700,-0.3521,-0.3700,-0.0179, + 12.660,-0.3700,-0.3027,-0.3790,-0.3790,-0.3700,-0.3447,-0.3700,-0.0253, + 12.680,-0.3700,-0.3027,-0.3790,-0.3790,-0.3700,-0.3453,-0.3700,-0.0247, + 12.700,-0.3700,-0.3027,-0.3790,-0.3790,-0.3700,-0.3468,-0.3700,-0.0232, + 12.720,-0.3700,-0.3026,-0.3790,-0.3790,-0.3700,-0.3456,-0.3700,-0.0244, + 12.740,-0.3700,-0.3026,-0.3790,-0.3790,-0.3700,-0.3459,-0.3700,-0.0241, + 12.760,-0.3700,-0.3026,-0.3790,-0.3790,-0.3700,-0.3455,-0.3700,-0.0245, + 12.780,-0.3700,-0.3026,-0.3790,-0.3790,-0.3700,-0.3456,-0.3700,-0.0244, + 12.800,-0.3700,-0.3026,-0.3790,-0.3790,-0.3700,-0.3453,-0.3700,-0.0247, + 12.820,-0.3700,-0.3026,-0.2995,-0.3790,-0.3700,-0.3379,-0.3700,-0.0321, + 12.840,-0.3700,-0.3026,-0.3062,-0.3790,-0.3700,-0.3384,-0.3700,-0.0316, + 12.860,-0.3700,-0.3026,-0.3087,-0.3790,-0.3700,-0.3399,-0.3700,-0.0301, + 12.880,-0.3700,-0.3026,-0.3091,-0.3790,-0.3700,-0.3387,-0.3700,-0.0313, + 12.900,-0.3700,-0.3026,-0.3088,-0.3790,-0.3700,-0.3391,-0.3700,-0.0309, + 12.920,-0.3700,-0.3026,-0.3084,-0.3790,-0.3700,-0.3387,-0.3700,-0.0313, + 12.940,-0.3700,-0.3026,-0.3079,-0.3790,-0.3700,-0.3388,-0.3700,-0.0312, + 12.960,-0.3700,-0.3026,-0.3076,-0.3790,-0.3700,-0.3388,-0.3700,-0.0312, + 12.980,-0.3700,-0.2995,-0.3073,-0.3790,-0.3700,-0.3308,-0.3700,-0.0392, + 13.000,-0.3700,-0.3039,-0.3071,-0.3790,-0.3700,-0.3317,-0.3700,-0.0383, + 13.020,-0.3700,-0.3029,-0.3069,-0.3790,-0.3700,-0.3319,-0.3700,-0.0381, + 13.040,-0.3700,-0.3159,-0.3068,-0.3790,-0.3700,-0.3326,-0.3700,-0.0374, + 13.060,-0.3700,-0.3031,-0.3068,-0.3790,-0.3700,-0.3320,-0.3700,-0.0380, + 13.080,-0.3700,-0.3068,-0.3067,-0.3790,-0.3700,-0.3321,-0.3700,-0.0379, + 13.100,-0.3700,-0.3030,-0.3067,-0.3790,-0.3700,-0.3319,-0.3700,-0.0381, + 13.120,-0.3700,-0.3047,-0.3067,-0.3790,-0.3700,-0.3320,-0.3700,-0.0380, + 13.140,-0.3700,-0.3044,-0.3067,-0.3790,-0.3700,-0.3237,-0.3700,-0.0463, + 13.160,-0.3700,-0.3056,-0.3067,-0.3790,-0.3700,-0.3248,-0.3700,-0.0452, + 13.180,-0.3700,-0.3060,-0.3067,-0.3790,-0.3700,-0.3250,-0.3700,-0.0450, + 13.200,-0.3700,-0.3067,-0.3067,-0.3790,-0.3700,-0.3260,-0.3700,-0.0440, + 13.220,-0.3700,-0.3071,-0.3067,-0.3790,-0.3700,-0.3250,-0.3700,-0.0450, + 13.240,-0.3700,-0.3076,-0.3067,-0.3790,-0.3700,-0.3252,-0.3700,-0.0448, + 13.260,-0.3700,-0.3078,-0.3067,-0.3790,-0.3700,-0.3249,-0.3700,-0.0451, + 13.280,-0.3700,-0.3081,-0.3067,-0.3790,-0.3700,-0.3250,-0.3700,-0.0450, + 13.300,-0.3700,-0.3083,-0.3067,-0.3790,-0.3700,-0.3168,-0.3700,-0.0532, + 13.320,-0.3700,-0.3085,-0.3067,-0.3790,-0.3700,-0.3179,-0.3700,-0.0521, + 13.340,-0.3700,-0.3086,-0.3067,-0.3790,-0.3700,-0.3181,-0.3700,-0.0519, + 13.360,-0.3700,-0.3088,-0.3067,-0.3790,-0.3700,-0.3191,-0.3700,-0.0509, + 13.380,-0.3700,-0.3089,-0.3067,-0.3790,-0.3700,-0.3181,-0.3700,-0.0519, + 13.400,-0.3700,-0.3089,-0.3067,-0.3790,-0.3700,-0.3184,-0.3700,-0.0516, + 13.420,-0.3700,-0.3090,-0.3067,-0.3790,-0.3700,-0.3180,-0.3700,-0.0520, + 13.440,-0.3700,-0.3091,-0.3067,-0.3790,-0.3700,-0.3181,-0.3700,-0.0519, + 13.460,-0.3700,-0.3091,-0.3067,-0.3790,-0.3700,-0.3099,-0.3700,-0.0601, + 13.480,-0.3700,-0.3092,-0.3067,-0.3790,-0.3700,-0.3110,-0.3700,-0.0590, + 13.500,-0.3700,-0.3092,-0.3067,-0.3790,-0.3700,-0.3112,-0.3700,-0.0588, + 13.520,-0.3700,-0.3093,-0.3067,-0.3790,-0.3700,-0.3122,-0.3700,-0.0578, + 13.540,-0.3700,-0.3093,-0.3067,-0.3790,-0.3700,-0.3112,-0.3700,-0.0588, + 13.560,-0.3700,-0.3093,-0.3067,-0.3790,-0.3700,-0.3114,-0.3700,-0.0586, + 13.580,-0.3700,-0.3093,-0.3067,-0.3790,-0.3700,-0.3111,-0.3700,-0.0589, + 13.600,-0.3700,-0.3094,-0.3067,-0.3790,-0.3700,-0.3112,-0.3700,-0.0588, + 13.620,-0.3700,-0.3094,-0.3067,-0.3790,-0.3700,-0.3109,-0.3700,-0.0591, + 13.640,-0.3700,-0.3095,-0.3067,-0.3671,-0.3700,-0.3108,-0.3700,-0.0592, + 13.660,-0.3700,-0.3095,-0.3067,-0.3684,-0.3700,-0.3108,-0.3700,-0.0592, + 13.680,-0.3700,-0.3095,-0.3067,-0.3687,-0.3700,-0.3118,-0.3700,-0.0582, + 13.700,-0.3700,-0.3095,-0.3067,-0.3684,-0.3700,-0.3107,-0.3700,-0.0593, + 13.720,-0.3700,-0.3095,-0.3067,-0.3689,-0.3700,-0.3111,-0.3700,-0.0589, + 13.740,-0.3700,-0.3095,-0.3067,-0.3687,-0.3700,-0.3108,-0.3700,-0.0592, + 13.760,-0.3700,-0.3095,-0.3067,-0.3686,-0.3700,-0.3109,-0.3700,-0.0591, + 13.780,-0.3700,-0.3095,-0.3044,-0.3686,-0.3700,-0.3106,-0.3700,-0.0594, + 13.800,-0.3700,-0.3095,-0.3079,-0.3685,-0.3700,-0.3181,-0.3700,-0.0519, + 13.820,-0.3700,-0.3095,-0.3071,-0.3685,-0.3700,-0.3179,-0.3700,-0.0521, + 13.840,-0.3700,-0.3095,-0.3166,-0.3684,-0.3700,-0.3182,-0.3700,-0.0518, + 13.860,-0.3700,-0.3095,-0.3063,-0.3684,-0.3700,-0.3163,-0.3700,-0.0537, + 13.880,-0.3700,-0.3095,-0.3092,-0.3684,-0.3700,-0.3180,-0.3700,-0.0520, + 13.900,-0.3700,-0.3095,-0.3062,-0.3684,-0.3700,-0.3173,-0.3700,-0.0527, + 13.920,-0.3700,-0.3095,-0.3076,-0.3684,-0.3700,-0.3176,-0.3700,-0.0524, + 13.940,-0.3700,-0.3095,-0.3074,-0.3684,-0.3700,-0.3173,-0.3700,-0.0527, + 13.960,-0.3700,-0.3095,-0.3083,-0.3684,-0.3700,-0.3247,-0.3700,-0.0453, + 13.980,-0.3700,-0.3095,-0.3085,-0.3684,-0.3700,-0.3244,-0.3700,-0.0456, + 14.000,-0.3700,-0.3095,-0.3090,-0.3684,-0.3700,-0.3247,-0.3700,-0.0453, + 14.020,-0.3700,-0.3095,-0.3092,-0.3684,-0.3700,-0.3228,-0.3700,-0.0472, + 14.040,-0.3700,-0.3095,-0.3094,-0.3684,-0.3700,-0.3245,-0.3700,-0.0455, + 14.060,-0.3700,-0.3095,-0.3095,-0.3684,-0.3700,-0.3238,-0.3700,-0.0462, + 14.080,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3241,-0.3700,-0.0459, + 14.100,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3237,-0.3700,-0.0463, + 14.120,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3312,-0.3700,-0.0388, + 14.140,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3309,-0.3700,-0.0391, + 14.160,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3312,-0.3700,-0.0388, + 14.180,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3292,-0.3700,-0.0408, + 14.200,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3309,-0.3700,-0.0391, + 14.220,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3303,-0.3700,-0.0397, + 14.240,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3305,-0.3700,-0.0395, + 14.260,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3302,-0.3700,-0.0398, + 14.280,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3376,-0.3700,-0.0324, + 14.300,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3373,-0.3700,-0.0327, + 14.320,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3376,-0.3700,-0.0324, + 14.340,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3357,-0.3700,-0.0343, + 14.360,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3373,-0.3700,-0.0327, + 14.380,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3367,-0.3700,-0.0333, + 14.400,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3370,-0.3700,-0.0330, + 14.420,-0.3700,-0.3095,-0.3096,-0.3684,-0.3700,-0.3366,-0.3700,-0.0334, + 14.440,-0.3700,-0.3095,-0.3800,-0.3684,-0.3700,-0.3441,-0.3700,-0.0259, + 14.460,-0.3700,-0.3095,-0.3779,-0.3684,-0.3700,-0.3437,-0.3700,-0.0263, + 14.480,-0.3700,-0.3095,-0.3713,-0.3684,-0.3700,-0.3441,-0.3700,-0.0259, + 14.500,-0.3700,-0.3095,-0.3621,-0.3684,-0.3700,-0.3421,-0.3700,-0.0279, + 14.520,-0.3700,-0.3095,-0.3760,-0.3684,-0.3700,-0.3438,-0.3700,-0.0262, + 14.540,-0.3700,-0.3095,-0.3726,-0.3684,-0.3700,-0.3431,-0.3700,-0.0269, + 14.560,-0.3700,-0.3095,-0.3739,-0.3684,-0.3700,-0.3434,-0.3700,-0.0266, + 14.580,-0.3700,-0.3095,-0.3731,-0.3684,-0.3700,-0.3433,-0.3700,-0.0267, + 14.600,-0.3700,-0.3095,-0.3727,-0.3680,-0.3700,-0.3504,-0.3700,-0.0196, + 14.620,-0.3700,-0.3095,-0.3723,-0.3686,-0.3700,-0.3502,-0.3700,-0.0198, + 14.640,-0.3700,-0.3095,-0.3720,-0.3686,-0.3700,-0.3495,-0.3700,-0.0205, + 14.660,-0.3700,-0.3095,-0.3717,-0.3661,-0.3700,-0.3485,-0.3700,-0.0215, + 14.680,-0.3700,-0.3095,-0.3716,-0.3683,-0.3700,-0.3500,-0.3700,-0.0200, + 14.700,-0.3700,-0.3095,-0.3715,-0.3688,-0.3700,-0.3497,-0.3700,-0.0203, + 14.720,-0.3700,-0.3095,-0.3714,-0.3683,-0.3700,-0.3497,-0.3700,-0.0203, + 14.740,-0.3700,-0.3095,-0.3713,-0.3684,-0.3700,-0.3497,-0.3700,-0.0203, + 14.760,-0.3700,-0.3095,-0.3713,-0.3685,-0.3700,-0.3569,-0.3700,-0.0131, + 14.780,-0.3700,-0.3095,-0.3712,-0.3688,-0.3700,-0.3567,-0.3700,-0.0133, + 14.800,-0.3700,-0.3095,-0.3712,-0.3684,-0.3700,-0.3564,-0.3700,-0.0136, + 14.820,-0.3700,-0.3095,-0.3712,-0.3686,-0.3700,-0.3496,-0.3700,-0.0204, + 14.840,-0.3700,-0.3095,-0.3712,-0.3687,-0.3700,-0.3563,-0.3700,-0.0137, + 14.860,-0.3700,-0.3095,-0.3712,-0.3686,-0.3700,-0.3558,-0.3700,-0.0142, + 14.880,-0.3700,-0.3095,-0.3712,-0.3688,-0.3700,-0.3559,-0.3700,-0.0141, + 14.900,-0.3700,-0.3095,-0.3712,-0.3687,-0.3700,-0.3555,-0.3700,-0.0145, + 14.920,-0.3700,-0.3095,-0.3712,-0.3688,-0.3700,-0.3633,-0.3700,-0.0067, + 14.940,-0.3700,-0.3095,-0.3711,-0.3688,-0.3700,-0.3635,-0.3700,-0.0065, + 14.960,-0.3700,-0.3095,-0.3712,-0.3688,-0.3700,-0.3619,-0.3700,-0.0081, + 14.980,-0.3700,-0.3095,-0.3711,-0.3688,-0.3700,-0.3553,-0.3700,-0.0147, + 15.000,-0.3700,-0.3095,-0.3711,-0.3688,-0.3700,-0.3622,-0.3700,-0.0078, + 15.020,-0.3700,-0.3095,-0.3711,-0.3688,-0.3700,-0.3615,-0.3700,-0.0085, + 15.040,-0.3700,-0.3095,-0.3712,-0.3688,-0.3700,-0.3618,-0.3700,-0.0082, + 15.060,-0.3700,-0.3095,-0.3711,-0.3688,-0.3700,-0.3613,-0.3700,-0.0087, + 15.080,-0.3700,-0.3095,-0.3712,-0.3688,-0.3700,-0.3693,-0.3700,-0.0007, + 15.100,-0.3700,-0.3095,-0.3711,-0.3688,-0.3700,-0.3694,-0.3700,-0.0006, + 15.120,-0.3700,-0.3095,-0.3712,-0.3688,-0.3700,-0.3678,-0.3700,-0.0022, + 15.140,-0.3700,-0.3095,-0.3711,-0.3688,-0.3700,-0.3612,-0.3700,-0.0088, + 15.160,-0.3700,-0.3095,-0.3712,-0.3688,-0.3700,-0.3682,-0.3700,-0.0018, + 15.180,-0.3700,-0.3095,-0.3712,-0.3688,-0.3700,-0.3674,-0.3700,-0.0026, + 15.200,-0.3700,-0.3095,-0.3711,-0.3688,-0.3700,-0.3678,-0.3700,-0.0022, + 15.220,-0.3700,-0.3095,-0.3712,-0.3688,-0.3700,-0.3672,-0.3700,-0.0028, + 15.240,-0.3700,-0.3095,-0.3711,-0.3688,-0.3700,-0.3681,-0.3700,-0.0019, + 15.260,-0.3700,-0.4003,-0.3712,-0.3688,-0.3700,-0.3730,-0.3700, 0.0030, + 15.280,-0.3700,-0.3989,-0.3711,-0.3688,-0.3700,-0.3720,-0.3700, 0.0020, + 15.300,-0.3700,-0.3925,-0.3712,-0.3688,-0.3700,-0.3660,-0.3700,-0.0040, + 15.320,-0.3700,-0.3828,-0.3711,-0.3688,-0.3700,-0.3711,-0.3700, 0.0011, + 15.340,-0.3700,-0.3973,-0.3711,-0.3688,-0.3700,-0.3714,-0.3700, 0.0014, + 15.360,-0.3700,-0.3941,-0.3712,-0.3688,-0.3700,-0.3715,-0.3700, 0.0015, + 15.380,-0.3700,-0.3956,-0.3711,-0.3688,-0.3700,-0.3710,-0.3700, 0.0010, + 15.400,-0.3700,-0.3950,-0.3728,-0.3688,-0.3700,-0.3720,-0.3700, 0.0020, + 15.420,-0.3700,-0.3948,-0.3740,-0.3688,-0.3700,-0.3753,-0.3700, 0.0053, + 15.440,-0.3700,-0.3944,-0.3782,-0.3688,-0.3700,-0.3742,-0.3700, 0.0042, + 15.460,-0.3700,-0.3942,-0.3193,-0.3688,-0.3700,-0.3680,-0.3700,-0.0020, + 15.480,-0.3700,-0.3940,-0.3728,-0.3688,-0.3700,-0.3731,-0.3700, 0.0031, + 15.500,-0.3700,-0.3938,-0.3708,-0.3688,-0.3700,-0.3735,-0.3700, 0.0035, + 15.520,-0.3700,-0.3937,-0.3708,-0.3688,-0.3700,-0.3736,-0.3700, 0.0036, + 15.540,-0.3700,-0.3936,-0.3675,-0.3688,-0.3700,-0.3731,-0.3700, 0.0031, + 15.560,-0.3700,-0.3936,-0.3743,-0.3688,-0.3700,-0.3741,-0.3700, 0.0041, + 15.580,-0.3700,-0.3935,-0.3776,-0.3688,-0.3700,-0.3773,-0.3700, 0.0073, + 15.600,-0.3700,-0.3935,-0.3642,-0.3688,-0.3700,-0.3763,-0.3700, 0.0063, + 15.620,-0.3700,-0.3934,-0.3661,-0.3688,-0.3700,-0.3700,-0.3700, 0.0000, + 15.640,-0.3700,-0.3934,-0.3686,-0.3688,-0.3700,-0.3750,-0.3700, 0.0050, + 15.660,-0.3700,-0.3934,-0.3663,-0.3688,-0.3700,-0.3755,-0.3700, 0.0055, + 15.680,-0.3700,-0.3934,-0.3691,-0.3688,-0.3700,-0.3755,-0.3700, 0.0055, + 15.700,-0.3700,-0.3934,-0.3674,-0.3688,-0.3700,-0.3751,-0.3700, 0.0051, + 15.720,-0.3700,-0.3934,-0.3690,-0.3688,-0.3700,-0.3760,-0.3700, 0.0060, + 15.740,-0.3700,-0.3934,-0.3681,-0.3688,-0.3700,-0.3793,-0.3700, 0.0093, + 15.760,-0.3700,-0.3933,-0.3689,-0.3688,-0.3700,-0.3782,-0.3700, 0.0082, + 15.780,-0.3700,-0.3933,-0.3685,-0.3688,-0.3700,-0.3720,-0.3700, 0.0020, + 15.800,-0.3700,-0.3933,-0.3689,-0.3688,-0.3700,-0.3770,-0.3700, 0.0070, + 15.820,-0.3700,-0.3933,-0.3686,-0.3688,-0.3700,-0.3775,-0.3700, 0.0075, + 15.840,-0.3700,-0.3933,-0.3689,-0.3688,-0.3700,-0.3775,-0.3700, 0.0075, + 15.860,-0.3700,-0.3933,-0.3686,-0.3688,-0.3700,-0.3771,-0.3700, 0.0071, + 15.880,-0.3700,-0.3933,-0.3689,-0.3688,-0.3700,-0.3780,-0.3700, 0.0080, + 15.900,-0.3700,-0.3933,-0.3687,-0.3688,-0.3700,-0.3813,-0.3700, 0.0113, + 15.920,-0.3700,-0.3933,-0.3688,-0.3688,-0.3700,-0.3802,-0.3700, 0.0102, + 15.940,-0.3700,-0.3933,-0.3687,-0.3688,-0.3700,-0.3740,-0.3700, 0.0040, + 15.960,-0.3700,-0.3933,-0.3688,-0.3688,-0.3700,-0.3790,-0.3700, 0.0090, + 15.980,-0.3700,-0.3933,-0.3687,-0.3688,-0.3700,-0.3794,-0.3700, 0.0094, + 16.000,-0.3700,-0.3933,-0.3688,-0.3688,-0.3700,-0.3795,-0.3700, 0.0095, + 16.020,-0.3700,-0.3933,-0.3687,-0.3688,-0.3700,-0.3790,-0.3700, 0.0090, + 16.040,-0.3700,-0.3933,-0.3688,-0.3688,-0.3700,-0.3800,-0.3700, 0.0100, + 16.060,-0.3700,-0.3933,-0.3979,-0.3688,-0.3700,-0.3832,-0.3700, 0.0132, + 16.080,-0.3700,-0.3933,-0.3962,-0.3688,-0.3700,-0.3822,-0.3700, 0.0122, + 16.100,-0.3700,-0.3933,-0.3914,-0.3688,-0.3700,-0.3759,-0.3700, 0.0059, + 16.120,-0.3700,-0.3933,-0.3855,-0.3688,-0.3700,-0.3810,-0.3700, 0.0110, + 16.140,-0.3700,-0.3933,-0.3948,-0.3688,-0.3700,-0.3814,-0.3700, 0.0114, + 16.160,-0.3700,-0.3933,-0.3921,-0.3688,-0.3700,-0.3815,-0.3700, 0.0115, + 16.180,-0.3700,-0.3933,-0.3931,-0.3688,-0.3700,-0.3810,-0.3700, 0.0110, + 16.200,-0.3700,-0.3933,-0.3924,-0.3688,-0.3700,-0.3818,-0.3700, 0.0118, + 16.220,-0.3700,-0.3951,-0.3919,-0.3688,-0.3700,-0.3850,-0.3700, 0.0150, + 16.240,-0.3700,-0.3965,-0.3918,-0.3688,-0.3700,-0.3836,-0.3700, 0.0136, + 16.260,-0.3700,-0.4011,-0.3914,-0.3688,-0.3700,-0.3835,-0.3700, 0.0135, + 16.280,-0.3700,-0.3321,-0.3914,-0.3688,-0.3700,-0.3797,-0.3700, 0.0097, + 16.300,-0.3700,-0.3900,-0.3911,-0.3688,-0.3700,-0.3833,-0.3700, 0.0133, + 16.320,-0.3700,-0.3887,-0.3911,-0.3688,-0.3700,-0.3832,-0.3700, 0.0132, + 16.340,-0.3700,-0.3892,-0.3910,-0.3688,-0.3700,-0.3832,-0.3700, 0.0132, + 16.360,-0.3700,-0.3863,-0.3910,-0.3688,-0.3700,-0.3831,-0.3700, 0.0131, + 16.380,-0.3700,-0.3937,-0.3910,-0.3688,-0.3700,-0.3864,-0.3700, 0.0164, + 16.400,-0.3700,-0.3978,-0.3909,-0.3688,-0.3700,-0.3865,-0.3700, 0.0165, + 16.420,-0.3700,-0.3842,-0.3910,-0.3688,-0.3700,-0.3856,-0.3700, 0.0156, + 16.440,-0.3700,-0.3861,-0.3908,-0.3688,-0.3700,-0.3829,-0.3700, 0.0129, + 16.460,-0.3700,-0.3887,-0.3910,-0.3688,-0.3700,-0.3860,-0.3700, 0.0160, + 16.480,-0.3700,-0.3864,-0.3909,-0.3688,-0.3700,-0.3854,-0.3700, 0.0154, + 16.500,-0.3700,-0.3893,-0.3909,-0.3688,-0.3700,-0.3856,-0.3700, 0.0156, + 16.520,-0.3700,-0.3877,-0.3909,-0.3688,-0.3700,-0.3853,-0.3700, 0.0153, + 16.540,-0.3700,-0.3893,-0.3910,-0.3688,-0.3700,-0.3888,-0.3700, 0.0188, + 16.560,-0.3700,-0.3885,-0.3909,-0.3688,-0.3700,-0.3888,-0.3700, 0.0188, + 16.580,-0.3700,-0.3894,-0.3909,-0.3688,-0.3700,-0.3877,-0.3700, 0.0177, + 16.600,-0.3700,-0.3890,-0.3909,-0.3688,-0.3700,-0.3850,-0.3700, 0.0150, + 16.620,-0.3700,-0.3895,-0.3909,-0.3688,-0.3700,-0.3881,-0.3700, 0.0181, + 16.640,-0.3700,-0.3892,-0.3909,-0.3688,-0.3700,-0.3876,-0.3700, 0.0176, + 16.660,-0.3700,-0.3896,-0.3909,-0.3688,-0.3700,-0.3878,-0.3700, 0.0178, + 16.680,-0.3700,-0.3893,-0.3910,-0.3688,-0.3700,-0.3874,-0.3700, 0.0174, + 16.700,-0.3700,-0.3896,-0.3908,-0.3688,-0.3700,-0.3909,-0.3700, 0.0209, + 16.720,-0.3700,-0.3895,-0.3910,-0.3688,-0.3700,-0.3909,-0.3700, 0.0209, + 16.740,-0.3700,-0.3896,-0.3908,-0.3688,-0.3700,-0.3899,-0.3700, 0.0199, + 16.760,-0.3700,-0.3896,-0.3910,-0.3688,-0.3700,-0.3871,-0.3700, 0.0171, + 16.780,-0.3700,-0.3897,-0.3908,-0.3688,-0.3700,-0.3903,-0.3700, 0.0203, + 16.800,-0.3700,-0.3896,-0.3909,-0.3688,-0.3700,-0.3897,-0.3700, 0.0197, + 16.820,-0.3700,-0.3897,-0.3909,-0.3688,-0.3700,-0.3899,-0.3700, 0.0199, + 16.840,-0.3700,-0.3896,-0.3908,-0.3688,-0.3700,-0.3895,-0.3700, 0.0195, + 16.860,-0.3700,-0.3897,-0.3910,-0.3688,-0.3700,-0.3901,-0.3700, 0.0201, + 16.880,-0.3700,-0.3897,-0.3909,-0.3696,-0.3700,-0.3903,-0.3700, 0.0203, + 16.900,-0.3700,-0.3898,-0.3910,-0.3739,-0.3700,-0.3900,-0.3700, 0.0200, + 16.920,-0.3700,-0.3897,-0.3908,-0.3735,-0.3700,-0.3878,-0.3700, 0.0178, + 16.940,-0.3700,-0.3897,-0.3910,-0.3725,-0.3700,-0.3900,-0.3700, 0.0200, + 16.960,-0.3700,-0.3899,-0.3909,-0.3739,-0.3700,-0.3897,-0.3700, 0.0197, + 16.980,-0.3700,-0.3895,-0.3909,-0.3684,-0.3700,-0.3896,-0.3700, 0.0196, + 17.000,-0.3700,-0.3898,-0.3909,-0.3737,-0.3700,-0.3895,-0.3700, 0.0195, + 17.020,-0.3700,-0.3898,-0.3921,-0.3684,-0.3700,-0.3899,-0.3700, 0.0199, + 17.040,-0.3700,-0.3896,-0.3928,-0.3736,-0.3700,-0.3836,-0.3700, 0.0136, + 17.060,-0.3700,-0.3899,-0.3957,-0.3683,-0.3700,-0.3916,-0.3700, 0.0216, + 17.080,-0.3700,-0.3896,-0.3732,-0.3735,-0.3700,-0.3906,-0.3700, 0.0206, + 17.100,-0.3700,-0.3898,-0.3940,-0.3682,-0.3700,-0.3932,-0.3700, 0.0232, + 17.120,-0.3700,-0.3896,-0.3924,-0.3735,-0.3700,-0.3919,-0.3700, 0.0219, + 17.140,-0.3700,-0.3898,-0.3921,-0.3681,-0.3700,-0.3824,-0.3700, 0.0124, + 17.160,-0.3700,-0.3897,-0.3899,-0.3734,-0.3700,-0.3921,-0.3700, 0.0221, + 17.180,-0.3700,-0.3897,-0.3941,-0.3681,-0.3700,-0.3827,-0.3700, 0.0127, + 17.200,-0.3700,-0.3898,-0.3963,-0.3734,-0.3700,-0.3863,-0.3700, 0.0163, + 17.220,-0.3700,-0.3897,-0.3872,-0.3681,-0.3700,-0.3844,-0.3700, 0.0144, + 17.240,-0.3700,-0.3898,-0.3885,-0.3734,-0.3700,-0.3934,-0.3700, 0.0234, + 17.260,-0.3700,-0.3896,-0.3899,-0.3681,-0.3700,-0.3860,-0.3700, 0.0160, + 17.280,-0.3700,-0.3899,-0.3886,-0.3734,-0.3700,-0.3948,-0.3700, 0.0248, + 17.300,-0.3700,-0.3897,-0.3903,-0.3681,-0.3700,-0.3752,-0.3700, 0.0052, + 17.320,-0.3700,-0.3898,-0.3892,-0.3734,-0.3700,-0.3950,-0.3700, 0.0250, + 17.340,-0.3700,-0.3897,-0.3902,-0.3681,-0.3700,-0.3755,-0.3700, 0.0055, + 17.360,-0.3700,-0.3898,-0.3895,-0.3734,-0.3700,-0.3892,-0.3700, 0.0192, + 17.380,-0.3700,-0.3897,-0.3901,-0.3681,-0.3700,-0.3772,-0.3700, 0.0072, + 17.400,-0.3700,-0.3898,-0.3897,-0.3734,-0.3700,-0.3963,-0.3700, 0.0263, + 17.420,-0.3700,-0.3897,-0.3900,-0.3681,-0.3700,-0.3788,-0.3700, 0.0088, + 17.440,-0.3700,-0.3897,-0.3897,-0.3734,-0.3700,-0.3977,-0.3700, 0.0277, + 17.460,-0.3700,-0.3897,-0.3900,-0.3681,-0.3700,-0.3680,-0.3700,-0.0020, + 17.480,-0.3700,-0.3897,-0.3897,-0.3734,-0.3700,-0.3979,-0.3700, 0.0279, + 17.500,-0.3700,-0.3898,-0.3899,-0.3681,-0.3700,-0.3683,-0.3700,-0.0017, + 17.520,-0.3700,-0.3896,-0.3898,-0.3734,-0.3700,-0.3921,-0.3700, 0.0221, + 17.540,-0.3700,-0.3899,-0.3898,-0.3681,-0.3700,-0.3700,-0.3700, 0.0000, + 17.560,-0.3700,-0.3896,-0.3898,-0.3734,-0.3700,-0.3992,-0.3700, 0.0292, + 17.580,-0.3700,-0.3899,-0.3898,-0.3681,-0.3700,-0.3716,-0.3700, 0.0016, + 17.600,-0.3700,-0.3896,-0.3897,-0.3734,-0.3700,-0.4006,-0.3700, 0.0306, + 17.620,-0.3700,-0.3898,-0.3898,-0.3681,-0.3700,-0.3608,-0.3700,-0.0092, + 17.640,-0.3700,-0.3898,-0.3898,-0.3734,-0.3700,-0.4008,-0.3700, 0.0308, + 17.660,-0.3700,-0.3896,-0.3897,-0.3681,-0.3700,-0.3611,-0.3700,-0.0089, + 17.680,-0.3700,-0.3899,-0.3221,-0.3734,-0.3700,-0.3951,-0.3700, 0.0251, + 17.700,-0.3700,-0.3896,-0.4103,-0.3681,-0.3700,-0.3628,-0.3700,-0.0072, + 17.720,-0.3700,-0.3898,-0.4194,-0.3734,-0.3700,-0.4022,-0.3700, 0.0322, + 17.740,-0.3700,-0.3896,-0.4254,-0.3681,-0.3700,-0.3644,-0.3700,-0.0056, + 17.760,-0.3700,-0.3899,-0.4136,-0.3734,-0.3700,-0.4036,-0.3700, 0.0336, + 17.780,-0.3700,-0.3897,-0.3188,-0.3681,-0.3700,-0.3536,-0.3700,-0.0164, + 17.800,-0.3700,-0.3897,-0.4169,-0.3734,-0.3700,-0.4037,-0.3700, 0.0337, + 17.820,-0.3700,-0.3897,-0.3189,-0.3681,-0.3700,-0.3538,-0.3700,-0.0162, + 17.840,-0.3700,-0.3898,-0.4184,-0.3736,-0.3700,-0.3978,-0.3700, 0.0278, + 17.860,-0.3700,-0.3897,-0.3190,-0.3685,-0.3700,-0.3552,-0.3700,-0.0148, + 17.880,-0.3700,-0.3898,-0.4192,-0.3691,-0.3700,-0.4066,-0.3700, 0.0366, + 17.900,-0.3700,-0.3897,-0.3190,-0.3697,-0.3700,-0.3570,-0.3700,-0.0130, + 17.920,-0.3700,-0.3897,-0.4197,-0.3738,-0.3700,-0.4063,-0.3700, 0.0363, + 17.940,-0.3700,-0.3897,-0.3191,-0.3684,-0.3700,-0.3463,-0.3700,-0.0237, + 17.960,-0.3700,-0.3897,-0.4199,-0.3736,-0.3700,-0.4067,-0.3700, 0.0367, + 17.980,-0.3700,-0.3898,-0.3191,-0.3679,-0.3700,-0.3463,-0.3700,-0.0237, + 18.000,-0.3700,-0.3897,-0.4200,-0.3688,-0.3700,-0.3998,-0.3700, 0.0298, + 18.020,-0.3700,-0.3898,-0.3191,-0.3692,-0.3700,-0.3484,-0.3700,-0.0216, + 18.040,-0.3700,-0.3897,-0.4201,-0.3728,-0.3700,-0.3999,-0.3700, 0.0299, + 18.060,-0.3700,-0.3898,-0.3191,-0.3676,-0.3700,-0.3574,-0.3700,-0.0126, + 18.080,-0.3700,-0.3896,-0.4201,-0.3733,-0.3700,-0.4090,-0.3700, 0.0390, + 18.100,-0.3700,-0.3898,-0.3191,-0.3676,-0.3700,-0.3392,-0.3700,-0.0308, + 18.120,-0.3700,-0.3897,-0.4201,-0.3733,-0.3700,-0.4096,-0.3700, 0.0396, + 18.140,-0.3700,-0.3897,-0.3191,-0.3677,-0.3700,-0.3392,-0.3700,-0.0308, + 18.160,-0.3700,-0.3898,-0.4201,-0.3733,-0.3700,-0.3930,-0.3700, 0.0230, + 18.180,-0.3700,-0.3897,-0.3191,-0.3678,-0.3700,-0.3413,-0.3700,-0.0287, + 18.200,-0.3700,-0.3898,-0.4201,-0.3733,-0.3700,-0.4034,-0.3700, 0.0334, + 18.220,-0.3700,-0.3897,-0.3191,-0.3679,-0.3700,-0.3504,-0.3700,-0.0196, + 18.240,-0.3700,-0.3898,-0.4201,-0.3733,-0.3700,-0.4121,-0.3700, 0.0421, + 18.260,-0.3700,-0.3897,-0.3191,-0.3679,-0.3700,-0.3322,-0.3700,-0.0378, + 18.280,-0.3700,-0.3898,-0.4201,-0.3733,-0.3700,-0.4128,-0.3700, 0.0428, + 18.300,-0.3700,-0.3897,-0.3191,-0.3679,-0.3700,-0.3322,-0.3700,-0.0378, + 18.320,-0.3700,-0.3897,-0.4200,-0.3733,-0.3700,-0.3961,-0.3700, 0.0261, + 18.340,-0.3700,-0.3897,-0.3191,-0.3679,-0.3700,-0.3343,-0.3700,-0.0357, + 18.360,-0.3700,-0.3897,-0.4200,-0.3732,-0.3700,-0.4066,-0.3700, 0.0366, + 18.380,-0.3700,-0.3897,-0.3192,-0.3679,-0.3700,-0.3434,-0.3700,-0.0266, + 18.400,-0.3700,-0.3897,-0.4200,-0.3733,-0.3700,-0.4153,-0.3700, 0.0453, + 18.420,-0.3700,-0.3897,-0.3191,-0.3679,-0.3700,-0.3252,-0.3700,-0.0448, + 18.440,-0.3700,-0.3897,-0.4201,-0.3732,-0.3700,-0.4159,-0.3700, 0.0459, + 18.460,-0.3700,-0.3898,-0.3191,-0.3679,-0.3700,-0.3252,-0.3700,-0.0448, + 18.480,-0.3700,-0.3896,-0.4201,-0.3732,-0.3700,-0.4060,-0.3700, 0.0360, + 18.500,-0.3700,-0.2954,-0.3191,-0.3679,-0.3700,-0.3205,-0.3700,-0.0495, + 18.520,-0.3700,-0.4221,-0.4201,-0.3732,-0.3700,-0.4084,-0.3700, 0.0384, + 18.540,-0.3700,-0.4372,-0.3191,-0.3679,-0.3700,-0.3352,-0.3700,-0.0348, + 18.560,-0.3700,-0.4474,-0.4201,-0.3732,-0.3700,-0.4190,-0.3700, 0.0490, + 18.580,-0.3700,-0.4276,-0.3191,-0.3679,-0.3700,-0.3271,-0.3700,-0.0429, + 18.600,-0.3700,-0.2899,-0.4201,-0.3732,-0.3700,-0.4114,-0.3700, 0.0414, + 18.620,-0.3700,-0.4331,-0.3191,-0.3679,-0.3700,-0.3274,-0.3700,-0.0426, + 18.640,-0.3700,-0.2899,-0.4185,-0.3732,-0.3700,-0.4013,-0.3700, 0.0313, + 18.660,-0.3700,-0.4356,-0.3188,-0.3679,-0.3700,-0.3249,-0.3700,-0.0451, + 18.680,-0.3700,-0.2900,-0.3198,-0.3732,-0.3700,-0.4032,-0.3700, 0.0332, + 18.700,-0.3700,-0.4371,-0.3948,-0.3679,-0.3700,-0.3370,-0.3700,-0.0330, + 18.720,-0.3700,-0.2901,-0.4151,-0.3732,-0.3700,-0.4135,-0.3700, 0.0435, + 18.740,-0.3700,-0.4378,-0.3189,-0.3679,-0.3700,-0.3291,-0.3700,-0.0409, + 18.760,-0.3700,-0.2902,-0.4183,-0.3732,-0.3700,-0.4087,-0.3700, 0.0387, + 18.780,-0.3700,-0.4382,-0.3195,-0.3679,-0.3700,-0.3293,-0.3700,-0.0407, + 18.800,-0.3700,-0.2903,-0.3190,-0.3732,-0.3700,-0.3986,-0.3700, 0.0286, + 18.820,-0.3700,-0.4383,-0.3201,-0.3679,-0.3700,-0.3268,-0.3700,-0.0432, + 18.840,-0.3700,-0.2903,-0.4241,-0.3732,-0.3700,-0.4005,-0.3700, 0.0305, + 18.860,-0.3700,-0.4384,-0.3202,-0.3679,-0.3700,-0.3389,-0.3700,-0.0311, + 18.880,-0.3700,-0.2903,-0.4212,-0.3732,-0.3700,-0.4108,-0.3700, 0.0408, + 18.900,-0.3700,-0.4384,-0.3202,-0.3679,-0.3700,-0.3310,-0.3700,-0.0390, + 18.920,-0.3700,-0.2903,-0.4209,-0.3732,-0.3700,-0.4059,-0.3700, 0.0359, + 18.940,-0.3700,-0.4384,-0.3198,-0.3679,-0.3700,-0.3312,-0.3700,-0.0388, + 18.960,-0.3700,-0.2903,-0.4211,-0.3732,-0.3700,-0.3959,-0.3700, 0.0259, + 18.980,-0.3700,-0.4384,-0.3196,-0.3679,-0.3700,-0.3287,-0.3700,-0.0413, + 19.000,-0.3700,-0.2903,-0.4213,-0.3732,-0.3700,-0.3977,-0.3700, 0.0277, + 19.020,-0.3700,-0.4384,-0.3195,-0.3679,-0.3700,-0.3408,-0.3700,-0.0292, + 19.040,-0.3700,-0.2903,-0.4213,-0.3732,-0.3700,-0.4080,-0.3700, 0.0380, + 19.060,-0.3700,-0.4384,-0.3195,-0.3679,-0.3700,-0.3328,-0.3700,-0.0372, + 19.080,-0.3700,-0.2903,-0.4213,-0.3732,-0.3700,-0.4032,-0.3700, 0.0332, + 19.100,-0.3700,-0.4384,-0.3195,-0.3679,-0.3700,-0.3331,-0.3700,-0.0369, + 19.120,-0.3700,-0.2903,-0.4214,-0.3732,-0.3700,-0.3932,-0.3700, 0.0232, + 19.140,-0.3700,-0.4384,-0.3195,-0.3679,-0.3700,-0.3305,-0.3700,-0.0395, + 19.160,-0.3700,-0.2903,-0.4215,-0.3732,-0.3700,-0.3950,-0.3700, 0.0250, + 19.180,-0.3700,-0.4384,-0.3195,-0.3679,-0.3700,-0.3427,-0.3700,-0.0273, + 19.200,-0.3700,-0.2903,-0.4215,-0.3732,-0.3700,-0.4053,-0.3700, 0.0353, + 19.220,-0.3700,-0.4384,-0.3195,-0.3679,-0.3700,-0.3347,-0.3700,-0.0353, + 19.240,-0.3700,-0.2903,-0.4215,-0.3732,-0.3700,-0.4005,-0.3700, 0.0305, + 19.260,-0.3700,-0.4384,-0.3195,-0.3679,-0.3700,-0.3350,-0.3700,-0.0350, + 19.280,-0.3700,-0.2903,-0.4215,-0.3732,-0.3700,-0.3904,-0.3700, 0.0204, + 19.300,-0.3700,-0.4384,-0.2928,-0.3679,-0.3700,-0.3324,-0.3700,-0.0376, + 19.320,-0.3700,-0.2903,-0.4334,-0.3732,-0.3700,-0.3923,-0.3700, 0.0223, + 19.340,-0.3700,-0.4384,-0.3374,-0.3679,-0.3700,-0.3445,-0.3700,-0.0255, + 19.360,-0.3700,-0.2903,-0.4436,-0.3732,-0.3700,-0.4026,-0.3700, 0.0326, + 19.380,-0.3700,-0.4384,-0.3335,-0.3679,-0.3700,-0.3366,-0.3700,-0.0334, + 19.400,-0.3700,-0.2903,-0.3927,-0.3732,-0.3700,-0.3978,-0.3700, 0.0278, + 19.420,-0.3700,-0.4384,-0.3357,-0.3679,-0.3700,-0.3368,-0.3700,-0.0332, + 19.440,-0.3700,-0.2903,-0.3926,-0.3732,-0.3700,-0.3879,-0.3700, 0.0179, + 19.460,-0.3700,-0.4357,-0.3368,-0.3679,-0.3700,-0.3342,-0.3700,-0.0358, + 19.480,-0.3700,-0.2899,-0.3926,-0.3732,-0.3700,-0.3996,-0.3700, 0.0296, + 19.500,-0.3700,-0.2914,-0.3373,-0.3679,-0.3700,-0.3315,-0.3700,-0.0385, + 19.520,-0.3700,-0.3973,-0.3927,-0.3732,-0.3700,-0.4057,-0.3700, 0.0357, + 19.540,-0.3700,-0.4301,-0.3376,-0.3679,-0.3700,-0.3381,-0.3700,-0.0319, + 19.560,-0.3700,-0.2899,-0.3927,-0.3732,-0.3700,-0.3952,-0.3700, 0.0252, + 19.580,-0.3700,-0.4354,-0.3378,-0.3679,-0.3700,-0.3385,-0.3700,-0.0315, + 19.600,-0.3700,-0.2909,-0.3928,-0.3732,-0.3700,-0.3953,-0.3700, 0.0253, + 19.620,-0.3700,-0.2902,-0.3378,-0.3679,-0.3700,-0.3286,-0.3700,-0.0414, + 19.640,-0.3700,-0.2920,-0.3928,-0.3732,-0.3700,-0.3965,-0.3700, 0.0265, + 19.660,-0.3700,-0.4453,-0.3379,-0.3679,-0.3700,-0.3363,-0.3700,-0.0337, + 19.680,-0.3700,-0.2922,-0.3929,-0.3732,-0.3700,-0.4007,-0.3700, 0.0307, + 19.700,-0.3700,-0.4404,-0.3379,-0.3679,-0.3700,-0.3400,-0.3700,-0.0300, + 19.720,-0.3700,-0.2921,-0.3928,-0.3732,-0.3700,-0.3925,-0.3700, 0.0225, + 19.740,-0.3700,-0.4398,-0.3379,-0.3679,-0.3700,-0.3404,-0.3700,-0.0296, + 19.760,-0.3700,-0.2915,-0.3928,-0.3732,-0.3700,-0.3925,-0.3700, 0.0225, + 19.780,-0.3700,-0.4401,-0.3379,-0.3679,-0.3700,-0.3332,-0.3700,-0.0368, + 19.800,-0.3700,-0.2912,-0.3928,-0.3732,-0.3700,-0.3937,-0.3700, 0.0237, + 19.820,-0.3700,-0.4404,-0.3379,-0.3679,-0.3700,-0.3382,-0.3700,-0.0318, + 19.840,-0.3700,-0.2910,-0.3928,-0.3732,-0.3700,-0.3979,-0.3700, 0.0279, + 19.860,-0.3700,-0.4405,-0.3379,-0.3679,-0.3700,-0.3420,-0.3700,-0.0280, + 19.880,-0.3700,-0.2910,-0.3928,-0.3732,-0.3700,-0.3896,-0.3700, 0.0196, + 19.900,-0.3700,-0.4405,-0.3379,-0.3679,-0.3700,-0.3424,-0.3700,-0.0276, + 19.920,-0.3700,-0.2910,-0.3928,-0.3732,-0.3700,-0.3897,-0.3700, 0.0197, + 19.940,-0.3700,-0.4406,-0.3379,-0.3679,-0.3700,-0.3351,-0.3700,-0.0349, + 19.960,-0.3700,-0.2910,-0.3927,-0.3732,-0.3700,-0.3909,-0.3700, 0.0209, + 19.980,-0.3700,-0.4408,-0.3379,-0.3679,-0.3700,-0.3401,-0.3700,-0.0299, + 20.000,-0.3700,-0.2910,-0.3927,-0.3732,-0.3700,-0.3951,-0.3700, 0.0251, + 20.020,-0.3700,-0.4408,-0.3379,-0.3679,-0.3700,-0.3439,-0.3700,-0.0261, + 20.040,-0.3700,-0.2910,-0.3928,-0.3732,-0.3700,-0.3868,-0.3700, 0.0168, + 20.060,-0.3700,-0.4408,-0.3379,-0.3679,-0.3700,-0.3443,-0.3700,-0.0257, + 20.080,-0.3700,-0.2910,-0.3928,-0.3732,-0.3700,-0.3868,-0.3700, 0.0168, + 20.100,-0.3700,-0.4409,-0.3378,-0.3679,-0.3700,-0.3397,-0.3700,-0.0303, + 20.120,-0.3700,-0.2982,-0.3928,-0.3679,-0.3700,-0.3869,-0.3700, 0.0169, + 20.140,-0.3700,-0.4341,-0.3379,-0.3709,-0.3700,-0.3401,-0.3700,-0.0299, + 20.160,-0.3700,-0.2980,-0.3928,-0.3716,-0.3700,-0.3903,-0.3700, 0.0203, + 20.180,-0.3700,-0.4342,-0.3378,-0.3723,-0.3700,-0.3443,-0.3700,-0.0257, + 20.200,-0.3700,-0.2980,-0.3928,-0.3711,-0.3700,-0.3871,-0.3700, 0.0171, + 20.220,-0.3700,-0.4343,-0.3379,-0.3675,-0.3700,-0.3443,-0.3700,-0.0257, + 20.240,-0.3700,-0.2980,-0.3928,-0.3714,-0.3700,-0.3871,-0.3700, 0.0171, + 20.260,-0.3700,-0.4341,-0.3367,-0.3675,-0.3700,-0.3396,-0.3700,-0.0304, + 20.280,-0.3700,-0.2980,-0.3927,-0.3715,-0.3700,-0.3843,-0.3700, 0.0143, + 20.300,-0.3700,-0.4341,-0.2912,-0.3675,-0.3700,-0.3442,-0.3700,-0.0258, + 20.320,-0.3700,-0.2980,-0.4242,-0.3716,-0.3700,-0.3834,-0.3700, 0.0134, + 20.340,-0.3700,-0.4341,-0.3345,-0.3675,-0.3700,-0.3474,-0.3700,-0.0226, + 20.360,-0.3700,-0.2980,-0.3926,-0.3717,-0.3700,-0.3806,-0.3700, 0.0106, + 20.380,-0.3700,-0.4341,-0.3367,-0.3675,-0.3700,-0.3522,-0.3700,-0.0178, + 20.400,-0.3700,-0.2980,-0.3930,-0.3717,-0.3700,-0.3804,-0.3700, 0.0104, + 20.420,-0.3700,-0.4342,-0.2907,-0.3675,-0.3700,-0.3475,-0.3700,-0.0225, + 20.440,-0.3700,-0.2980,-0.3935,-0.3717,-0.3700,-0.3775,-0.3700, 0.0075, + 20.460,-0.3700,-0.4342,-0.3407,-0.3675,-0.3700,-0.3522,-0.3700,-0.0178, + 20.480,-0.3700,-0.2980,-0.3936,-0.3717,-0.3700,-0.3765,-0.3700, 0.0065, + 20.500,-0.3700,-0.4342,-0.3387,-0.3675,-0.3700,-0.3554,-0.3700,-0.0146, + 20.520,-0.3700,-0.2980,-0.3935,-0.3717,-0.3700,-0.3736,-0.3700, 0.0036, + 20.540,-0.3700,-0.4342,-0.3384,-0.3675,-0.3700,-0.3602,-0.3700,-0.0098, + 20.560,-0.3700,-0.2980,-0.3933,-0.3717,-0.3700,-0.3735,-0.3700, 0.0035, + 20.580,-0.3700,-0.4342,-0.3386,-0.3675,-0.3700,-0.3555,-0.3700,-0.0145, + 20.600,-0.3700,-0.2980,-0.3932,-0.3717,-0.3700,-0.3705,-0.3700, 0.0005, + 20.620,-0.3700,-0.4342,-0.3387,-0.3675,-0.3700,-0.3601,-0.3700,-0.0099, + 20.640,-0.3700,-0.2980,-0.3931,-0.3717,-0.3700,-0.3696,-0.3700,-0.0004, + 20.660,-0.3700,-0.4342,-0.3387,-0.3675,-0.3700,-0.3633,-0.3700,-0.0067, + 20.680,-0.3700,-0.2980,-0.3931,-0.3717,-0.3700,-0.3667,-0.3700,-0.0033, + 20.700,-0.3700,-0.4342,-0.3387,-0.3675,-0.3700,-0.3681,-0.3700,-0.0019, + 20.720,-0.3700,-0.2980,-0.3931,-0.3717,-0.3700,-0.3665,-0.3700,-0.0035, + 20.740,-0.3700,-0.4341,-0.3388,-0.3675,-0.3700,-0.3634,-0.3700,-0.0066, + 20.760,-0.3700,-0.2980,-0.3931,-0.3717,-0.3700,-0.3636,-0.3700,-0.0064, + 20.780,-0.3700,-0.4341,-0.3388,-0.3675,-0.3700,-0.3680,-0.3700,-0.0020, + 20.800,-0.3700,-0.2980,-0.3931,-0.3717,-0.3700,-0.3626,-0.3700,-0.0074, + 20.820,-0.3700,-0.4341,-0.3388,-0.3675,-0.3700,-0.3712,-0.3700, 0.0012, + 20.840,-0.3700,-0.2980,-0.3931,-0.3717,-0.3700,-0.3598,-0.3700,-0.0102, + 20.860,-0.3700,-0.4341,-0.3388,-0.3675,-0.3700,-0.3760,-0.3700, 0.0060, + 20.880,-0.3700,-0.2980,-0.3931,-0.3717,-0.3700,-0.3596,-0.3700,-0.0104, + 20.900,-0.3700,-0.4342,-0.3389,-0.3675,-0.3700,-0.3713,-0.3700, 0.0013, + 20.920,-0.3700,-0.2980,-0.3646,-0.3717,-0.3700,-0.3567,-0.3700,-0.0133, + 20.940,-0.3700,-0.4342,-0.3806,-0.3675,-0.3700,-0.3760,-0.3700, 0.0060, + 20.960,-0.3700,-0.2980,-0.3238,-0.3717,-0.3700,-0.3557,-0.3700,-0.0143, + 20.980,-0.3700,-0.4342,-0.3712,-0.3675,-0.3700,-0.3791,-0.3700, 0.0091, + 21.000,-0.3700,-0.2980,-0.3271,-0.3717,-0.3700,-0.3528,-0.3700,-0.0172, + 21.020,-0.3700,-0.4342,-0.4174,-0.3675,-0.3700,-0.3840,-0.3700, 0.0140, + 21.040,-0.3700,-0.2980,-0.3253,-0.3717,-0.3700,-0.3526,-0.3700,-0.0174, + 21.060,-0.3700,-0.4342,-0.4173,-0.3675,-0.3700,-0.3794,-0.3700, 0.0094, + 21.080,-0.3700,-0.2980,-0.3244,-0.3715,-0.3700,-0.3497,-0.3700,-0.0203, + 21.100,-0.3700,-0.4342,-0.4172,-0.3675,-0.3700,-0.3886,-0.3700, 0.0186, + 21.120,-0.3700,-0.2980,-0.3239,-0.3676,-0.3700,-0.3454,-0.3700,-0.0246, + 21.140,-0.3700,-0.4410,-0.4172,-0.3684,-0.3700,-0.3878,-0.3700, 0.0178, + 21.160,-0.3700,-0.2982,-0.3237,-0.3712,-0.3700,-0.3459,-0.3700,-0.0241, + 21.180,-0.3700,-0.4342,-0.4172,-0.3675,-0.3700,-0.3920,-0.3700, 0.0220, + 21.200,-0.3700,-0.2980,-0.3235,-0.3715,-0.3700,-0.3457,-0.3700,-0.0243, + 21.220,-0.3700,-0.4341,-0.4172,-0.3676,-0.3700,-0.3920,-0.3700, 0.0220, + 21.240,-0.3700,-0.2980,-0.3235,-0.3675,-0.3700,-0.3426,-0.3700,-0.0274, + 21.260,-0.3700,-0.4341,-0.4172,-0.3677,-0.3700,-0.3962,-0.3700, 0.0262, + 21.280,-0.3700,-0.2980,-0.3234,-0.3722,-0.3700,-0.3429,-0.3700,-0.0271, + 21.300,-0.3700,-0.4341,-0.4172,-0.3677,-0.3700,-0.3874,-0.3700, 0.0174, + 21.320,-0.3700,-0.2980,-0.3234,-0.3718,-0.3700,-0.3392,-0.3700,-0.0308, + 21.340,-0.3700,-0.4341,-0.4172,-0.3677,-0.3700,-0.3999,-0.3700, 0.0299, + 21.360,-0.3700,-0.2980,-0.3234,-0.3718,-0.3700,-0.3388,-0.3700,-0.0312, + 21.380,-0.3700,-0.4342,-0.4172,-0.3676,-0.3700,-0.3999,-0.3700, 0.0299, + 21.400,-0.3700,-0.2980,-0.3234,-0.3718,-0.3700,-0.3402,-0.3700,-0.0298, + 21.420,-0.3700,-0.4342,-0.4172,-0.3676,-0.3700,-0.4040,-0.3700, 0.0340, + 21.440,-0.3700,-0.2980,-0.3234,-0.3718,-0.3700,-0.3357,-0.3700,-0.0343, + 21.460,-0.3700,-0.4342,-0.4172,-0.3676,-0.3700,-0.3952,-0.3700, 0.0252, + 21.480,-0.3700,-0.2980,-0.3234,-0.3718,-0.3700,-0.3322,-0.3700,-0.0378, + 21.500,-0.3700,-0.4342,-0.4172,-0.3676,-0.3700,-0.4077,-0.3700, 0.0377, + 21.520,-0.3700,-0.2980,-0.3234,-0.3718,-0.3700,-0.3318,-0.3700,-0.0382, + 21.540,-0.3700,-0.4342,-0.4171,-0.3676,-0.3700,-0.4077,-0.3700, 0.0377, + 21.560,-0.3700,-0.2980,-0.3234,-0.3718,-0.3700,-0.3331,-0.3700,-0.0369, + 21.580,-0.3700,-0.4342,-0.4171,-0.3676,-0.3700,-0.4118,-0.3700, 0.0418, + 21.600,-0.3700,-0.2980,-0.3235,-0.3719,-0.3700,-0.3286,-0.3700,-0.0414, + 21.620,-0.3700,-0.4342,-0.4171,-0.3676,-0.3700,-0.4030,-0.3700, 0.0330, + 21.640,-0.3700,-0.2980,-0.3234,-0.3719,-0.3700,-0.3251,-0.3700,-0.0449, + 21.660,-0.3700,-0.4342,-0.4172,-0.3676,-0.3700,-0.4155,-0.3700, 0.0455, + 21.680,-0.3700,-0.2980,-0.3234,-0.3719,-0.3700,-0.3248,-0.3700,-0.0452, + 21.700,-0.3700,-0.4341,-0.4172,-0.3676,-0.3700,-0.4155,-0.3700, 0.0455, + 21.720,-0.3700,-0.2980,-0.3234,-0.3719,-0.3700,-0.3289,-0.3700,-0.0411, + 21.740,-0.3700,-0.3907,-0.4172,-0.3673,-0.3700,-0.4133,-0.3700, 0.0433, + 21.760,-0.3700,-0.3557,-0.3234,-0.3721,-0.3700,-0.3314,-0.3700,-0.0386, + 21.780,-0.3700,-0.3482,-0.4172,-0.3673,-0.3700,-0.4032,-0.3700, 0.0332, + 21.800,-0.3700,-0.3431,-0.3234,-0.3721,-0.3700,-0.3269,-0.3700,-0.0431, + 21.820,-0.3700,-0.3508,-0.4172,-0.3673,-0.3700,-0.4113,-0.3700, 0.0413, + 21.840,-0.3700,-0.3951,-0.3234,-0.3721,-0.3700,-0.3294,-0.3700,-0.0406, + 21.860,-0.3700,-0.3513,-0.4172,-0.3673,-0.3700,-0.4113,-0.3700, 0.0413, + 21.880,-0.3700,-0.3963,-0.3244,-0.3721,-0.3700,-0.3337,-0.3700,-0.0363, + 21.900,-0.3700,-0.3508,-0.4173,-0.3673,-0.3700,-0.4098,-0.3700, 0.0398, + 21.920,-0.3700,-0.3964,-0.3660,-0.3721,-0.3700,-0.3356,-0.3700,-0.0344, + 21.940,-0.3700,-0.3502,-0.3382,-0.3673,-0.3700,-0.4010,-0.3700, 0.0310, + 21.960,-0.3700,-0.3963,-0.3263,-0.3721,-0.3700,-0.3313,-0.3700,-0.0387, + 21.980,-0.3700,-0.3499,-0.4173,-0.3673,-0.3700,-0.4092,-0.3700, 0.0392, + 22.000,-0.3700,-0.3962,-0.3245,-0.3721,-0.3700,-0.3326,-0.3700,-0.0374, + 22.020,-0.3700,-0.3497,-0.4170,-0.3673,-0.3700,-0.4089,-0.3700, 0.0389, + 22.040,-0.3700,-0.3962,-0.3664,-0.3721,-0.3700,-0.3368,-0.3700,-0.0332, + 22.060,-0.3700,-0.3496,-0.4166,-0.3673,-0.3700,-0.4073,-0.3700, 0.0373, + 22.080,-0.3700,-0.3962,-0.3211,-0.3721,-0.3700,-0.3387,-0.3700,-0.0313, + 22.100,-0.3700,-0.3496,-0.4165,-0.3673,-0.3700,-0.3986,-0.3700, 0.0286, + 22.120,-0.3700,-0.3961,-0.3227,-0.3721,-0.3700,-0.3344,-0.3700,-0.0356, + 22.140,-0.3700,-0.3496,-0.4165,-0.3673,-0.3700,-0.4068,-0.3700, 0.0368, + 22.160,-0.3700,-0.3961,-0.3230,-0.3721,-0.3700,-0.3357,-0.3700,-0.0343, + 22.180,-0.3700,-0.3496,-0.4168,-0.3673,-0.3700,-0.4065,-0.3700, 0.0365, + 22.200,-0.3700,-0.3961,-0.3228,-0.3721,-0.3700,-0.3399,-0.3700,-0.0301, + 22.220,-0.3700,-0.3496,-0.4169,-0.3673,-0.3700,-0.4049,-0.3700, 0.0349, + 22.240,-0.3700,-0.3961,-0.3227,-0.3721,-0.3700,-0.3418,-0.3700,-0.0282, + 22.260,-0.3700,-0.3496,-0.4169,-0.3673,-0.3700,-0.3962,-0.3700, 0.0262, + 22.280,-0.3700,-0.3961,-0.3227,-0.3721,-0.3700,-0.3375,-0.3700,-0.0325, + 22.300,-0.3700,-0.3496,-0.4169,-0.3673,-0.3700,-0.4043,-0.3700, 0.0343, + 22.320,-0.3700,-0.3961,-0.3227,-0.3721,-0.3700,-0.3388,-0.3700,-0.0312, + 22.340,-0.3700,-0.3496,-0.4169,-0.3673,-0.3700,-0.4041,-0.3700, 0.0341, + 22.360,-0.3700,-0.3961,-0.3227,-0.3721,-0.3700,-0.3430,-0.3700,-0.0270, + 22.380,-0.3700,-0.3496,-0.4169,-0.3673,-0.3700,-0.4025,-0.3700, 0.0325, + 22.400,-0.3700,-0.3961,-0.3226,-0.3721,-0.3700,-0.3449,-0.3700,-0.0251, + 22.420,-0.3700,-0.3496,-0.4169,-0.3673,-0.3700,-0.3938,-0.3700, 0.0238, + 22.440,-0.3700,-0.3961,-0.3226,-0.3721,-0.3700,-0.3406,-0.3700,-0.0294, + 22.460,-0.3700,-0.3496,-0.4169,-0.3673,-0.3700,-0.4019,-0.3700, 0.0319, + 22.480,-0.3700,-0.3961,-0.3226,-0.3721,-0.3700,-0.3419,-0.3700,-0.0281, + 22.500,-0.3700,-0.3496,-0.4169,-0.3673,-0.3700,-0.4017,-0.3700, 0.0317, + 22.520,-0.3700,-0.3961,-0.3226,-0.3721,-0.3700,-0.3461,-0.3700,-0.0239, + 22.540,-0.3700,-0.3496,-0.4021,-0.3673,-0.3700,-0.4001,-0.3700, 0.0301, + 22.560,-0.3700,-0.3961,-0.3457,-0.3721,-0.3700,-0.3481,-0.3700,-0.0219, + 22.580,-0.3700,-0.3496,-0.3941,-0.3673,-0.3700,-0.3914,-0.3700, 0.0214, + 22.600,-0.3700,-0.3961,-0.3405,-0.3721,-0.3700,-0.3437,-0.3700,-0.0263, + 22.620,-0.3700,-0.3496,-0.3967,-0.3673,-0.3700,-0.3995,-0.3700, 0.0295, + 22.640,-0.3700,-0.3961,-0.3550,-0.3721,-0.3700,-0.3450,-0.3700,-0.0250, + 22.660,-0.3700,-0.3496,-0.3944,-0.3673,-0.3700,-0.3993,-0.3700, 0.0293, + 22.680,-0.3700,-0.3961,-0.3547,-0.3721,-0.3700,-0.3491,-0.3700,-0.0209, + 22.700,-0.3700,-0.3508,-0.3936,-0.3673,-0.3700,-0.3978,-0.3700, 0.0278, + 22.720,-0.3700,-0.3964,-0.3547,-0.3721,-0.3700,-0.3469,-0.3700,-0.0231, + 22.740,-0.3700,-0.3975,-0.3933,-0.3673,-0.3700,-0.3993,-0.3700, 0.0293, + 22.760,-0.3700,-0.2966,-0.3546,-0.3719,-0.3700,-0.3416,-0.3700,-0.0284, + 22.780,-0.3700,-0.3443,-0.3932,-0.3673,-0.3700,-0.3968,-0.3700, 0.0268, + 22.800,-0.3700,-0.3934,-0.3546,-0.3721,-0.3700,-0.3479,-0.3700,-0.0221, + 22.820,-0.3700,-0.3495,-0.3931,-0.3673,-0.3700,-0.3969,-0.3700, 0.0269, + 22.840,-0.3700,-0.3953,-0.3545,-0.3721,-0.3700,-0.3479,-0.3700,-0.0221, + 22.860,-0.3700,-0.3977,-0.3931,-0.3673,-0.3700,-0.3978,-0.3700, 0.0278, + 22.880,-0.3700,-0.3979,-0.3545,-0.3721,-0.3700,-0.3503,-0.3700,-0.0197, + 22.900,-0.3700,-0.3478,-0.3931,-0.3673,-0.3700,-0.3957,-0.3700, 0.0257, + 22.920,-0.3700,-0.3956,-0.3545,-0.3721,-0.3700,-0.3465,-0.3700,-0.0235, + 22.940,-0.3700,-0.3488,-0.3931,-0.3673,-0.3700,-0.3948,-0.3700, 0.0248, + 22.960,-0.3700,-0.3953,-0.3545,-0.3721,-0.3700,-0.3514,-0.3700,-0.0186, + 22.980,-0.3700,-0.3489,-0.3931,-0.3673,-0.3700,-0.3946,-0.3700, 0.0246, + 23.000,-0.3700,-0.3955,-0.3545,-0.3721,-0.3700,-0.3511,-0.3700,-0.0189, + 23.020,-0.3700,-0.3487,-0.3931,-0.3673,-0.3700,-0.3943,-0.3700, 0.0243, + 23.040,-0.3700,-0.3957,-0.3545,-0.3721,-0.3700,-0.3533,-0.3700,-0.0167, + 23.060,-0.3700,-0.3486,-0.3931,-0.3673,-0.3700,-0.3931,-0.3700, 0.0231, + 23.080,-0.3700,-0.3957,-0.3545,-0.3721,-0.3700,-0.3496,-0.3700,-0.0204, + 23.100,-0.3700,-0.3486,-0.3931,-0.3673,-0.3700,-0.3924,-0.3700, 0.0224, + 23.120,-0.3700,-0.3957,-0.3545,-0.3721,-0.3700,-0.3546,-0.3700,-0.0154, + 23.140,-0.3700,-0.3486,-0.3931,-0.3673,-0.3700,-0.3922,-0.3700, 0.0222, + 23.160,-0.3700,-0.3957,-0.3546,-0.3721,-0.3700,-0.3543,-0.3700,-0.0157, + 23.180,-0.3700,-0.3485,-0.3931,-0.3673,-0.3700,-0.3918,-0.3700, 0.0218, + 23.200,-0.3700,-0.3957,-0.3546,-0.3721,-0.3700,-0.3565,-0.3700,-0.0135, + 23.220,-0.3700,-0.3485,-0.3930,-0.3673,-0.3700,-0.3907,-0.3700, 0.0207, + 23.240,-0.3700,-0.3957,-0.3547,-0.3721,-0.3700,-0.3528,-0.3700,-0.0172, + 23.260,-0.3700,-0.3485,-0.3931,-0.3673,-0.3700,-0.3899,-0.3700, 0.0199, + 23.280,-0.3700,-0.3957,-0.3546,-0.3721,-0.3700,-0.3578,-0.3700,-0.0122, + 23.300,-0.3700,-0.3485,-0.3931,-0.3673,-0.3700,-0.3898,-0.3700, 0.0198, + 23.320,-0.3700,-0.3957,-0.3545,-0.3721,-0.3700,-0.3575,-0.3700,-0.0125, + 23.340,-0.3700,-0.3484,-0.3931,-0.3673,-0.3700,-0.3909,-0.3700, 0.0209, + 23.360,-0.3700,-0.4012,-0.3545,-0.3689,-0.3700,-0.3575,-0.3700,-0.0125, + 23.380,-0.3700,-0.3410,-0.3931,-0.3725,-0.3700,-0.3905,-0.3700, 0.0205, + 23.400,-0.3700,-0.4081,-0.3545,-0.3718,-0.3700,-0.3548,-0.3700,-0.0152, + 23.420,-0.3700,-0.3408,-0.3931,-0.3663,-0.3700,-0.3891,-0.3700, 0.0191, + 23.440,-0.3700,-0.4081,-0.3545,-0.3669,-0.3700,-0.3581,-0.3700,-0.0119, + 23.460,-0.3700,-0.3407,-0.3931,-0.3689,-0.3700,-0.3893,-0.3700, 0.0193, + 23.480,-0.3700,-0.4082,-0.3545,-0.3665,-0.3700,-0.3578,-0.3700,-0.0122, + 23.500,-0.3700,-0.3409,-0.3937,-0.3689,-0.3700,-0.3905,-0.3700, 0.0205, + 23.520,-0.3700,-0.4080,-0.3546,-0.3664,-0.3700,-0.3545,-0.3700,-0.0155, + 23.540,-0.3700,-0.3410,-0.4054,-0.3738,-0.3700,-0.3928,-0.3700, 0.0228, + 23.560,-0.3700,-0.4080,-0.3222,-0.3716,-0.3700,-0.3626,-0.3700,-0.0074, + 23.580,-0.3700,-0.3410,-0.3938,-0.3738,-0.3700,-0.3822,-0.3700, 0.0122, + 23.600,-0.3700,-0.4080,-0.3573,-0.3716,-0.3700,-0.3558,-0.3700,-0.0142, + 23.620,-0.3700,-0.3410,-0.3943,-0.3738,-0.3700,-0.3813,-0.3700, 0.0113, + 23.640,-0.3700,-0.4081,-0.3546,-0.3716,-0.3700,-0.3558,-0.3700,-0.0142, + 23.660,-0.3700,-0.3409,-0.4057,-0.3738,-0.3700,-0.3824,-0.3700, 0.0124, + 23.680,-0.3700,-0.4081,-0.3533,-0.3716,-0.3700,-0.3527,-0.3700,-0.0173, + 23.700,-0.3700,-0.3408,-0.3913,-0.3738,-0.3700,-0.3940,-0.3700, 0.0240, + 23.720,-0.3700,-0.4081,-0.3541,-0.3716,-0.3700,-0.3705,-0.3700, 0.0005, + 23.740,-0.3700,-0.3408,-0.3927,-0.3738,-0.3700,-0.3834,-0.3700, 0.0134, + 23.760,-0.3700,-0.4081,-0.3543,-0.3716,-0.3700,-0.3637,-0.3700,-0.0063, + 23.780,-0.3700,-0.3408,-0.3928,-0.3738,-0.3700,-0.3825,-0.3700, 0.0125, + 23.800,-0.3700,-0.4081,-0.3543,-0.3716,-0.3700,-0.3637,-0.3700,-0.0063, + 23.820,-0.3700,-0.3408,-0.3928,-0.3738,-0.3700,-0.3836,-0.3700, 0.0136, + 23.840,-0.3700,-0.4081,-0.3544,-0.3716,-0.3700,-0.3606,-0.3700,-0.0094, + 23.860,-0.3700,-0.3408,-0.3928,-0.3738,-0.3700,-0.3953,-0.3700, 0.0253, + 23.880,-0.3700,-0.4081,-0.3544,-0.3716,-0.3700,-0.3784,-0.3700, 0.0084, + 23.900,-0.3700,-0.3409,-0.3927,-0.3738,-0.3700,-0.3846,-0.3700, 0.0146, + 23.920,-0.3700,-0.4081,-0.3544,-0.3716,-0.3700,-0.3716,-0.3700, 0.0016, + 23.940,-0.3700,-0.3409,-0.3927,-0.3738,-0.3700,-0.3837,-0.3700, 0.0137, + 23.960,-0.3700,-0.4081,-0.3544,-0.3716,-0.3700,-0.3716,-0.3700, 0.0016, + 23.980,-0.3700,-0.3410,-0.3927,-0.3738,-0.3700,-0.3849,-0.3700, 0.0149, + 24.000,-0.3700,-0.4080,-0.3545,-0.3716,-0.3700,-0.3685,-0.3700,-0.0015, + 24.020,-0.3700,-0.3410,-0.3927,-0.3738,-0.3700,-0.3965,-0.3700, 0.0265, + 24.040,-0.3700,-0.4080,-0.3545,-0.3716,-0.3700,-0.3863,-0.3700, 0.0163, + 24.060,-0.3700,-0.3411,-0.3927,-0.3738,-0.3700,-0.3859,-0.3700, 0.0159, + 24.080,-0.3700,-0.4080,-0.3545,-0.3716,-0.3700,-0.3795,-0.3700, 0.0095, + 24.100,-0.3700,-0.3409,-0.3927,-0.3738,-0.3700,-0.3849,-0.3700, 0.0149, + 24.120,-0.3700,-0.4081,-0.3545,-0.3716,-0.3700,-0.3795,-0.3700, 0.0095, + 24.140,-0.3700,-0.3408,-0.3926,-0.3738,-0.3700,-0.3861,-0.3700, 0.0161, + 24.160,-0.3700,-0.4081,-0.3231,-0.3716,-0.3700,-0.3764,-0.3700, 0.0064, + 24.180,-0.3700,-0.3408,-0.4165,-0.3738,-0.3700,-0.3977,-0.3700, 0.0277, + 24.200,-0.3700,-0.4081,-0.4333,-0.3716,-0.3700,-0.3942,-0.3700, 0.0242, + 24.220,-0.3700,-0.3408,-0.3204,-0.3738,-0.3700,-0.3871,-0.3700, 0.0171, + 24.240,-0.3700,-0.4081,-0.3298,-0.3716,-0.3700,-0.3874,-0.3700, 0.0174, + 24.260,-0.3700,-0.3408,-0.3102,-0.3738,-0.3700,-0.3861,-0.3700, 0.0161, + 24.280,-0.3700,-0.4081,-0.3326,-0.3716,-0.3700,-0.3874,-0.3700, 0.0174, + 24.300,-0.3700,-0.3409,-0.3101,-0.3738,-0.3700,-0.3872,-0.3700, 0.0172, + 24.320,-0.3700,-0.4081,-0.3336,-0.3717,-0.3700,-0.3843,-0.3700, 0.0143, + 24.340,-0.3700,-0.3408,-0.4053,-0.3738,-0.3700,-0.3977,-0.3700, 0.0277, + 24.360,-0.3700,-0.4081,-0.4334,-0.3686,-0.3700,-0.4052,-0.3700, 0.0352, + 24.380,-0.3700,-0.3507,-0.4053,-0.3672,-0.3700,-0.3884,-0.3700, 0.0184, + 24.400,-0.3700,-0.4012,-0.4334,-0.3726,-0.3700,-0.3947,-0.3700, 0.0247, + 24.420,-0.3700,-0.3433,-0.4053,-0.3739,-0.3700,-0.3873,-0.3700, 0.0173, + 24.440,-0.3700,-0.4081,-0.4334,-0.3718,-0.3700,-0.3953,-0.3700, 0.0253, + 24.460,-0.3700,-0.3409,-0.4053,-0.3738,-0.3700,-0.3872,-0.3700, 0.0172, + 24.480,-0.3700,-0.4081,-0.4334,-0.3687,-0.3700,-0.3921,-0.3700, 0.0221, + 24.500,-0.3700,-0.3409,-0.4053,-0.3737,-0.3700,-0.3991,-0.3700, 0.0291, + 24.520,-0.3700,-0.4081,-0.4335,-0.3662,-0.3700,-0.4022,-0.3700, 0.0322, + 24.540,-0.3700,-0.3409,-0.4052,-0.3738,-0.3700,-0.3877,-0.3700, 0.0177, + 24.560,-0.3700,-0.4080,-0.4335,-0.3715,-0.3700,-0.4025,-0.3700, 0.0325, + 24.580,-0.3700,-0.3410,-0.4052,-0.3738,-0.3700,-0.3883,-0.3700, 0.0183, + 24.600,-0.3700,-0.4080,-0.4335,-0.3715,-0.3700,-0.4032,-0.3700, 0.0332, + 24.620,-0.3700,-0.3409,-0.4052,-0.3738,-0.3700,-0.3884,-0.3700, 0.0184, + 24.640,-0.3700,-0.4081,-0.4335,-0.3715,-0.3700,-0.3894,-0.3700, 0.0194, + 24.660,-0.3700,-0.3408,-0.4053,-0.3738,-0.3700,-0.4006,-0.3700, 0.0306, + 24.680,-0.3700,-0.4081,-0.4335,-0.3715,-0.3700,-0.4008,-0.3700, 0.0308, + 24.700,-0.3700,-0.3408,-0.4053,-0.3738,-0.3700,-0.3891,-0.3700, 0.0191, + 24.720,-0.3700,-0.4081,-0.4334,-0.3715,-0.3700,-0.4104,-0.3700, 0.0404, + 24.740,-0.3700,-0.3408,-0.4053,-0.3738,-0.3700,-0.3896,-0.3700, 0.0196, + 24.760,-0.3700,-0.4081,-0.4334,-0.3715,-0.3700,-0.4111,-0.3700, 0.0411, + 24.780,-0.3700,-0.3409,-0.4053,-0.3738,-0.3700,-0.3897,-0.3700, 0.0197, + 24.800,-0.3700,-0.4081,-0.4334,-0.3663,-0.3700,-0.3970,-0.3700, 0.0270, + 24.820,-0.3700,-0.3409,-0.4053,-0.3738,-0.3700,-0.4018,-0.3700, 0.0318, + 24.840,-0.3700,-0.4081,-0.4334,-0.3663,-0.3700,-0.4084,-0.3700, 0.0384, + 24.860,-0.3700,-0.3409,-0.4053,-0.3738,-0.3700,-0.3903,-0.3700, 0.0203, + 24.880,-0.3700,-0.4081,-0.4334,-0.3663,-0.3700,-0.4180,-0.3700, 0.0480, + 24.900,-0.3700,-0.3409,-0.4053,-0.3738,-0.3700,-0.3909,-0.3700, 0.0209, + 24.920,-0.3700,-0.4081,-0.4334,-0.3663,-0.3700,-0.4187,-0.3700, 0.0487, + 24.940,-0.3700,-0.3409,-0.4052,-0.3738,-0.3700,-0.3910,-0.3700, 0.0210, + 24.960,-0.3700,-0.4080,-0.4335,-0.3663,-0.3700,-0.3982,-0.3700, 0.0282, + 24.980,-0.3700,-0.2905,-0.4052,-0.3687,-0.3700,-0.3980,-0.3700, 0.0280, + 25.000,-0.3700,-0.4475,-0.4335,-0.3663,-0.3700,-0.4006,-0.3700, 0.0306, + 25.020,-0.3700,-0.4499,-0.4052,-0.3739,-0.3700,-0.4043,-0.3700, 0.0343, + 25.040,-0.3700,-0.3078,-0.4335,-0.3663,-0.3700,-0.4135,-0.3700, 0.0435, + 25.060,-0.3700,-0.2974,-0.4052,-0.3739,-0.3700,-0.3983,-0.3700, 0.0283, + 25.080,-0.3700,-0.2907,-0.4334,-0.3663,-0.3700,-0.4131,-0.3700, 0.0431, + 25.100,-0.3700,-0.3021,-0.4053,-0.3739,-0.3700,-0.3986,-0.3700, 0.0286, + 25.120,-0.3700,-0.2904,-0.4334,-0.3663,-0.3700,-0.3925,-0.3700, 0.0225, + 25.140,-0.3700,-0.3039,-0.4052,-0.3739,-0.3700,-0.3874,-0.3700, 0.0174, + 25.160,-0.3700,-0.4287,-0.3254,-0.3663,-0.3700,-0.3914,-0.3700, 0.0214, + 25.180,-0.3700,-0.4501,-0.3876,-0.3739,-0.3700,-0.4071,-0.3700, 0.0371, + 25.200,-0.3700,-0.4288,-0.4289,-0.3663,-0.3700,-0.4069,-0.3700, 0.0369, + 25.220,-0.3700,-0.4501,-0.4036,-0.3739,-0.3700,-0.4038,-0.3700, 0.0338, + 25.240,-0.3700,-0.4288,-0.4333,-0.3663,-0.3700,-0.4067,-0.3700, 0.0367, + 25.260,-0.3700,-0.4501,-0.4051,-0.3739,-0.3700,-0.4041,-0.3700, 0.0341, + 25.280,-0.3700,-0.4288,-0.3254,-0.3663,-0.3700,-0.3861,-0.3700, 0.0161, + 25.300,-0.3700,-0.4501,-0.4076,-0.3739,-0.3700,-0.3929,-0.3700, 0.0229, + 25.320,-0.3700,-0.4288,-0.3377,-0.3663,-0.3700,-0.3824,-0.3700, 0.0124, + 25.340,-0.3700,-0.4501,-0.4063,-0.3739,-0.3700,-0.4099,-0.3700, 0.0399, + 25.360,-0.3700,-0.4288,-0.4334,-0.3663,-0.3700,-0.3979,-0.3700, 0.0279, + 25.380,-0.3700,-0.4501,-0.4060,-0.3739,-0.3700,-0.4066,-0.3700, 0.0366, + 25.400,-0.3700,-0.4288,-0.4334,-0.3663,-0.3700,-0.3977,-0.3700, 0.0277, + 25.420,-0.3700,-0.4501,-0.4057,-0.3739,-0.3700,-0.4069,-0.3700, 0.0369, + 25.440,-0.3700,-0.4288,-0.4335,-0.3663,-0.3700,-0.3770,-0.3700, 0.0070, + 25.460,-0.3700,-0.4501,-0.4055,-0.3739,-0.3700,-0.3957,-0.3700, 0.0257, + 25.480,-0.3700,-0.4288,-0.4335,-0.3663,-0.3700,-0.3734,-0.3700, 0.0034, + 25.500,-0.3700,-0.4501,-0.4055,-0.3739,-0.3700,-0.4127,-0.3700, 0.0427, + 25.520,-0.3700,-0.4288,-0.4335,-0.3663,-0.3700,-0.3889,-0.3700, 0.0189, + 25.540,-0.3700,-0.4501,-0.4055,-0.3739,-0.3700,-0.4094,-0.3700, 0.0394, + 25.560,-0.3700,-0.4288,-0.4335,-0.3663,-0.3700,-0.3887,-0.3700, 0.0187, + 25.580,-0.3700,-0.4501,-0.4055,-0.3739,-0.3700,-0.4097,-0.3700, 0.0397, + 25.600,-0.3700,-0.4288,-0.3351,-0.3663,-0.3700,-0.3680,-0.3700,-0.0020, + 25.620,-0.3700,-0.4501,-0.4055,-0.3739,-0.3700,-0.3985,-0.3700, 0.0285, + 25.640,-0.3700,-0.4288,-0.3352,-0.3663,-0.3700,-0.3644,-0.3700,-0.0056, + 25.660,-0.3700,-0.4501,-0.4055,-0.3739,-0.3700,-0.4155,-0.3700, 0.0455, + 25.680,-0.3700,-0.4288,-0.3352,-0.3663,-0.3700,-0.3799,-0.3700, 0.0099, + 25.700,-0.3700,-0.4501,-0.4055,-0.3739,-0.3700,-0.4122,-0.3700, 0.0422, + 25.720,-0.3700,-0.4288,-0.3352,-0.3663,-0.3700,-0.3797,-0.3700, 0.0097, + 25.740,-0.3700,-0.4501,-0.4055,-0.3739,-0.3700,-0.4125,-0.3700, 0.0425, + 25.760,-0.3700,-0.4288,-0.3352,-0.3663,-0.3700,-0.3590,-0.3700,-0.0110, + 25.780,-0.3700,-0.4501,-0.2902,-0.3739,-0.3700,-0.4013,-0.3700, 0.0313, + 25.800,-0.3700,-0.4288,-0.3508,-0.3663,-0.3700,-0.3553,-0.3700,-0.0147, + 25.820,-0.3700,-0.4501,-0.4332,-0.3739,-0.3700,-0.4183,-0.3700, 0.0483, + 25.840,-0.3700,-0.4288,-0.3072,-0.3663,-0.3700,-0.3709,-0.3700, 0.0009, + 25.860,-0.3700,-0.4501,-0.3842,-0.3739,-0.3700,-0.4150,-0.3700, 0.0450, + 25.880,-0.3700,-0.4288,-0.3003,-0.3663,-0.3700,-0.3706,-0.3700, 0.0006, + 25.900,-0.3700,-0.4501,-0.3861,-0.3739,-0.3700,-0.4153,-0.3700, 0.0453, + 25.920,-0.3700,-0.4288,-0.3001,-0.3663,-0.3700,-0.3500,-0.3700,-0.0200, + 25.940,-0.3700,-0.4500,-0.3869,-0.3739,-0.3700,-0.4041,-0.3700, 0.0341, + 25.960,-0.3700,-0.4286,-0.3432,-0.3663,-0.3700,-0.3571,-0.3700,-0.0129, + 25.980,-0.3700,-0.2900,-0.4333,-0.3739,-0.3700,-0.4149,-0.3700, 0.0449, + 26.000,-0.3700,-0.4016,-0.3433,-0.3662,-0.3700,-0.3610,-0.3700,-0.0090, + 26.020,-0.3700,-0.4466,-0.4333,-0.3738,-0.3700,-0.4178,-0.3700, 0.0478, + 26.040,-0.3700,-0.4245,-0.3433,-0.3716,-0.3700,-0.3617,-0.3700,-0.0083, + 26.060,-0.3700,-0.4498,-0.4333,-0.3739,-0.3700,-0.4181,-0.3700, 0.0481, + 26.080,-0.3700,-0.4285,-0.3433,-0.3663,-0.3700,-0.3518,-0.3700,-0.0182, + 26.100,-0.3700,-0.2901,-0.4332,-0.3739,-0.3700,-0.3986,-0.3700, 0.0286, + 26.120,-0.3700,-0.4327,-0.3433,-0.3663,-0.3700,-0.3579,-0.3700,-0.0121, + 26.140,-0.3700,-0.3108,-0.4332,-0.3739,-0.3700,-0.4134,-0.3700, 0.0434, + 26.160,-0.3700,-0.4304,-0.3434,-0.3663,-0.3700,-0.3525,-0.3700,-0.0175, + 26.180,-0.3700,-0.4501,-0.4332,-0.3739,-0.3700,-0.4211,-0.3700, 0.0511, + 26.200,-0.3700,-0.4299,-0.3434,-0.3663,-0.3700,-0.3623,-0.3700,-0.0077, + 26.220,-0.3700,-0.4501,-0.4332,-0.3739,-0.3700,-0.4209,-0.3700, 0.0509, + 26.240,-0.3700,-0.4295,-0.3434,-0.3663,-0.3700,-0.3428,-0.3700,-0.0272, + 26.260,-0.3700,-0.4501,-0.4332,-0.3739,-0.3700,-0.4042,-0.3700, 0.0342, + 26.280,-0.3700,-0.4292,-0.3434,-0.3663,-0.3700,-0.3488,-0.3700,-0.0212, + 26.300,-0.3700,-0.4501,-0.4332,-0.3739,-0.3700,-0.4188,-0.3700, 0.0488, + 26.320,-0.3700,-0.4291,-0.3433,-0.3663,-0.3700,-0.3435,-0.3700,-0.0265, + 26.340,-0.3700,-0.4501,-0.4333,-0.3739,-0.3700,-0.4239,-0.3700, 0.0539, + 26.360,-0.3700,-0.4291,-0.3433,-0.3663,-0.3700,-0.3533,-0.3700,-0.0167, + 26.380,-0.3700,-0.4501,-0.4333,-0.3739,-0.3700,-0.4236,-0.3700, 0.0536, + 26.400,-0.3700,-0.4291,-0.3433,-0.3663,-0.3700,-0.3436,-0.3700,-0.0264, + 26.420,-0.3700,-0.3065,-0.4333,-0.3739,-0.3700,-0.3998,-0.3700, 0.0298, + 26.440,-0.3700,-0.4291,-0.3432,-0.3663,-0.3700,-0.3497,-0.3700,-0.0203, + 26.460,-0.3700,-0.3066,-0.4333,-0.3739,-0.3700,-0.4144,-0.3700, 0.0444, + 26.480,-0.3700,-0.4291,-0.3432,-0.3663,-0.3700,-0.3444,-0.3700,-0.0256, + 26.500,-0.3700,-0.3065,-0.4333,-0.3739,-0.3700,-0.4195,-0.3700, 0.0495, + 26.520,-0.3700,-0.4291,-0.3433,-0.3663,-0.3700,-0.3542,-0.3700,-0.0158, + 26.540,-0.3700,-0.3066,-0.4333,-0.3739,-0.3700,-0.4192,-0.3700, 0.0492, + 26.560,-0.3700,-0.4291,-0.3434,-0.3663,-0.3700,-0.3445,-0.3700,-0.0255, + 26.580,-0.3700,-0.3066,-0.4332,-0.3739,-0.3700,-0.4096,-0.3700, 0.0396, + 26.600,-0.3700,-0.2941,-0.3434,-0.3676,-0.3700,-0.3423,-0.3700,-0.0277, + 26.620,-0.3700,-0.3052,-0.4332,-0.3723,-0.3700,-0.4097,-0.3700, 0.0397, + 26.640,-0.3700,-0.4156,-0.3434,-0.3725,-0.3700,-0.3476,-0.3700,-0.0224, + 26.660,-0.3700,-0.3135,-0.4332,-0.3687,-0.3700,-0.4199,-0.3700, 0.0499, + 26.680,-0.3700,-0.4154,-0.3434,-0.3680,-0.3700,-0.3579,-0.3700,-0.0121, + 26.700,-0.3700,-0.3136,-0.4332,-0.3675,-0.3700,-0.4195,-0.3700, 0.0495, + 26.720,-0.3700,-0.4154,-0.3433,-0.3683,-0.3700,-0.3482,-0.3700,-0.0218, + 26.740,-0.3700,-0.3134,-0.4332,-0.3675,-0.3700,-0.4097,-0.3700, 0.0397, + 26.760,-0.3700,-0.4156,-0.3433,-0.3684,-0.3700,-0.3513,-0.3700,-0.0187, + 26.780,-0.3700,-0.3133,-0.3812,-0.3711,-0.3700,-0.3993,-0.3700, 0.0293, + 26.800,-0.3700,-0.4156,-0.3346,-0.3725,-0.3700,-0.3496,-0.3700,-0.0204, + 26.820,-0.3700,-0.3133,-0.4373,-0.3712,-0.3700,-0.4134,-0.3700, 0.0434, + 26.840,-0.3700,-0.4156,-0.4397,-0.3725,-0.3700,-0.3645,-0.3700,-0.0055, + 26.860,-0.3700,-0.3133,-0.4332,-0.3712,-0.3700,-0.4136,-0.3700, 0.0436, + 26.880,-0.3700,-0.4155,-0.3432,-0.3725,-0.3700,-0.3547,-0.3700,-0.0153, + 26.900,-0.3700,-0.3134,-0.3813,-0.3712,-0.3700,-0.4038,-0.3700, 0.0338, + 26.920,-0.3700,-0.4155,-0.3449,-0.3725,-0.3700,-0.3577,-0.3700,-0.0123, + 26.940,-0.3700,-0.3134,-0.3897,-0.3712,-0.3700,-0.3893,-0.3700, 0.0193, + 26.960,-0.3700,-0.4155,-0.3439,-0.3725,-0.3700,-0.3515,-0.3700,-0.0185, + 26.980,-0.3700,-0.3135,-0.4333,-0.3712,-0.3700,-0.4034,-0.3700, 0.0334, + 27.000,-0.3700,-0.4154,-0.3437,-0.3725,-0.3700,-0.3664,-0.3700,-0.0036, + 27.020,-0.3700,-0.3135,-0.4333,-0.3712,-0.3700,-0.4035,-0.3700, 0.0335, + 27.040,-0.3700,-0.4155,-0.3436,-0.3725,-0.3700,-0.3566,-0.3700,-0.0134, + 27.060,-0.3700,-0.3135,-0.4332,-0.3712,-0.3700,-0.3938,-0.3700, 0.0238, + 27.080,-0.3700,-0.4155,-0.3435,-0.3725,-0.3700,-0.3597,-0.3700,-0.0103, + 27.100,-0.3700,-0.3135,-0.4332,-0.3712,-0.3700,-0.3793,-0.3700, 0.0093, + 27.120,-0.3700,-0.4155,-0.3435,-0.3725,-0.3700,-0.3534,-0.3700,-0.0166, + 27.140,-0.3700,-0.3134,-0.4332,-0.3712,-0.3700,-0.3933,-0.3700, 0.0233, + 27.160,-0.3700,-0.4155,-0.3435,-0.3725,-0.3700,-0.3684,-0.3700,-0.0016, + 27.180,-0.3700,-0.3134,-0.4332,-0.3712,-0.3700,-0.3935,-0.3700, 0.0235, + 27.200,-0.3700,-0.4155,-0.3435,-0.3725,-0.3700,-0.3586,-0.3700,-0.0114, + 27.220,-0.3700,-0.3133,-0.3879,-0.3712,-0.3700,-0.3838,-0.3700, 0.0138, + 27.240,-0.3700,-0.4156,-0.3434,-0.3725,-0.3700,-0.3616,-0.3700,-0.0084, + 27.260,-0.3700,-0.3133,-0.3880,-0.3712,-0.3700,-0.3693,-0.3700,-0.0007, + 27.280,-0.3700,-0.4156,-0.3434,-0.3725,-0.3700,-0.3554,-0.3700,-0.0146, + 27.300,-0.3700,-0.3133,-0.3880,-0.3712,-0.3700,-0.3833,-0.3700, 0.0133, + 27.320,-0.3700,-0.4156,-0.3434,-0.3725,-0.3700,-0.3703,-0.3700, 0.0003, + 27.340,-0.3700,-0.3134,-0.3880,-0.3712,-0.3700,-0.3835,-0.3700, 0.0135, + 27.360,-0.3700,-0.4155,-0.3434,-0.3725,-0.3700,-0.3605,-0.3700,-0.0095, + 27.380,-0.3700,-0.3135,-0.3880,-0.3712,-0.3700,-0.3738,-0.3700, 0.0038, + 27.400,-0.3700,-0.4154,-0.3730,-0.3725,-0.3700,-0.3636,-0.3700,-0.0064, + 27.420,-0.3700,-0.3135,-0.3259,-0.3712,-0.3700,-0.3592,-0.3700,-0.0108, + 27.440,-0.3700,-0.4155,-0.3628,-0.3725,-0.3700,-0.3573,-0.3700,-0.0127, + 27.460,-0.3700,-0.3135,-0.3667,-0.3712,-0.3700,-0.3733,-0.3700, 0.0033, + 27.480,-0.3700,-0.4154,-0.4072,-0.3725,-0.3700,-0.3723,-0.3700, 0.0023, + 27.500,-0.3700,-0.3135,-0.3727,-0.3712,-0.3700,-0.3735,-0.3700, 0.0035, + 27.520,-0.3700,-0.4155,-0.4056,-0.3725,-0.3700,-0.3624,-0.3700,-0.0076, + 27.540,-0.3700,-0.3134,-0.3727,-0.3712,-0.3700,-0.3638,-0.3700,-0.0062, + 27.560,-0.3700,-0.4155,-0.4051,-0.3725,-0.3700,-0.3655,-0.3700,-0.0045, + 27.580,-0.3700,-0.3135,-0.3330,-0.3711,-0.3700,-0.3544,-0.3700,-0.0156, + 27.600,-0.3700,-0.4155,-0.3628,-0.3675,-0.3700,-0.3599,-0.3700,-0.0101, + 27.620,-0.3700,-0.3095,-0.3330,-0.3687,-0.3700,-0.3626,-0.3700,-0.0074, + 27.640,-0.3700,-0.4243,-0.3628,-0.3723,-0.3700,-0.3650,-0.3700,-0.0050, + 27.660,-0.3700,-0.4433,-0.3330,-0.3709,-0.3700,-0.3700,-0.3700,-0.0000, + 27.680,-0.3700,-0.4250,-0.3628,-0.3725,-0.3700,-0.3649,-0.3700,-0.0051, + 27.700,-0.3700,-0.3136,-0.3331,-0.3711,-0.3700,-0.3590,-0.3700,-0.0110, + 27.720,-0.3700,-0.4156,-0.3628,-0.3675,-0.3700,-0.3670,-0.3700,-0.0030, + 27.740,-0.3700,-0.3134,-0.3331,-0.3714,-0.3700,-0.3488,-0.3700,-0.0212, + 27.760,-0.3700,-0.4155,-0.3627,-0.3688,-0.3700,-0.3666,-0.3700,-0.0034, + 27.780,-0.3700,-0.3134,-0.3331,-0.3712,-0.3700,-0.3493,-0.3700,-0.0207, + 27.800,-0.3700,-0.4156,-0.3627,-0.3725,-0.3700,-0.3670,-0.3700,-0.0030, + 27.820,-0.3700,-0.3133,-0.3331,-0.3712,-0.3700,-0.3582,-0.3700,-0.0118, + 27.840,-0.3700,-0.4156,-0.3627,-0.3725,-0.3700,-0.3659,-0.3700,-0.0041, + 27.860,-0.3700,-0.3134,-0.3331,-0.3712,-0.3700,-0.3489,-0.3700,-0.0211, + 27.880,-0.3700,-0.4155,-0.3627,-0.3725,-0.3700,-0.3739,-0.3700, 0.0039, + 27.900,-0.3700,-0.3135,-0.3331,-0.3712,-0.3700,-0.3386,-0.3700,-0.0314, + 27.920,-0.3700,-0.4155,-0.3628,-0.3725,-0.3700,-0.3727,-0.3700, 0.0027, + 27.940,-0.3700,-0.3135,-0.3331,-0.3712,-0.3700,-0.3393,-0.3700,-0.0307, + 27.960,-0.3700,-0.4155,-0.3628,-0.3725,-0.3700,-0.3689,-0.3700,-0.0011, + 27.980,-0.3700,-0.3134,-0.3331,-0.3712,-0.3700,-0.3482,-0.3700,-0.0218, + 28.000,-0.3700,-0.4155,-0.3628,-0.3725,-0.3700,-0.3679,-0.3700,-0.0021, + 28.020,-0.3700,-0.3134,-0.3330,-0.3712,-0.3700,-0.3434,-0.3700,-0.0266, + 28.040,-0.3700,-0.4155,-0.3628,-0.3686,-0.3700,-0.3756,-0.3700, 0.0056, + 28.060,-0.3700,-0.3134,-0.3330,-0.3712,-0.3700,-0.3331,-0.3700,-0.0369, + 28.080,-0.3700,-0.4155,-0.3628,-0.3686,-0.3700,-0.3744,-0.3700, 0.0044, + 28.100,-0.3700,-0.3134,-0.3330,-0.3712,-0.3700,-0.3338,-0.3700,-0.0362, + 28.120,-0.3700,-0.4155,-0.3628,-0.3686,-0.3700,-0.3706,-0.3700, 0.0006, + 28.140,-0.3700,-0.3134,-0.3330,-0.3712,-0.3700,-0.3427,-0.3700,-0.0273, + 28.160,-0.3700,-0.4155,-0.3628,-0.3686,-0.3700,-0.3696,-0.3700,-0.0004, + 28.180,-0.3700,-0.3134,-0.3331,-0.3712,-0.3700,-0.3379,-0.3700,-0.0321, + 28.200,-0.3700,-0.4156,-0.3627,-0.3686,-0.3700,-0.3788,-0.3700, 0.0088, + 28.220,-0.3700,-0.4087,-0.3331,-0.3674,-0.3700,-0.3384,-0.3700,-0.0316, + 28.240,-0.3700,-0.3436,-0.3627,-0.3686,-0.3700,-0.3749,-0.3700, 0.0049, + 28.260,-0.3700,-0.3431,-0.3331,-0.3712,-0.3700,-0.3319,-0.3700,-0.0381, + 28.280,-0.3700,-0.3869,-0.3627,-0.3685,-0.3700,-0.3689,-0.3700,-0.0011, + 28.300,-0.3700,-0.3929,-0.3331,-0.3711,-0.3700,-0.3427,-0.3700,-0.0273, + 28.320,-0.3700,-0.3970,-0.3628,-0.3685,-0.3700,-0.3685,-0.3700,-0.0015, + 28.340,-0.3700,-0.3933,-0.3331,-0.3711,-0.3700,-0.3379,-0.3700,-0.0321, + 28.360,-0.3700,-0.3983,-0.3628,-0.3685,-0.3700,-0.3778,-0.3700, 0.0078, + 28.380,-0.3700,-0.3933,-0.3332,-0.3711,-0.3700,-0.3450,-0.3700,-0.0250, + 28.400,-0.3700,-0.3551,-0.4098,-0.3685,-0.3700,-0.3770,-0.3700, 0.0070, + 28.420,-0.3700,-0.3445,-0.2980,-0.3711,-0.3700,-0.3339,-0.3700,-0.0361, + 28.440,-0.3700,-0.3515,-0.3675,-0.3685,-0.3700,-0.3708,-0.3700, 0.0008, + 28.460,-0.3700,-0.3424,-0.3810,-0.3711,-0.3700,-0.3432,-0.3700,-0.0268, + 28.480,-0.3700,-0.3504,-0.3590,-0.3685,-0.3700,-0.3701,-0.3700, 0.0001, + 28.500,-0.3700,-0.3418,-0.3331,-0.3711,-0.3700,-0.3383,-0.3700,-0.0317, + 28.520,-0.3700,-0.3500,-0.4098,-0.3685,-0.3700,-0.3793,-0.3700, 0.0093, + 28.540,-0.3700,-0.3416,-0.3317,-0.3711,-0.3700,-0.3452,-0.3700,-0.0248, + 28.560,-0.3700,-0.3499,-0.4027,-0.3685,-0.3700,-0.3796,-0.3700, 0.0096, + 28.580,-0.3700,-0.3415,-0.3325,-0.3711,-0.3700,-0.3353,-0.3700,-0.0347, + 28.600,-0.3700,-0.3498,-0.3628,-0.3685,-0.3700,-0.3736,-0.3700, 0.0036, + 28.620,-0.3700,-0.3415,-0.3326,-0.3711,-0.3700,-0.3449,-0.3700,-0.0251, + 28.640,-0.3700,-0.3498,-0.3628,-0.3685,-0.3700,-0.3731,-0.3700, 0.0031, + 28.660,-0.3700,-0.3415,-0.3328,-0.3711,-0.3700,-0.3400,-0.3700,-0.0300, + 28.680,-0.3700,-0.3498,-0.3628,-0.3685,-0.3700,-0.3823,-0.3700, 0.0123, + 28.700,-0.3700,-0.3415,-0.3329,-0.3711,-0.3700,-0.3470,-0.3700,-0.0230, + 28.720,-0.3700,-0.3498,-0.3627,-0.3685,-0.3700,-0.3826,-0.3700, 0.0126, + 28.740,-0.3700,-0.3415,-0.3330,-0.3711,-0.3700,-0.3371,-0.3700,-0.0329, + 28.760,-0.3700,-0.3498,-0.3627,-0.3685,-0.3700,-0.3766,-0.3700, 0.0066, + 28.780,-0.3700,-0.3415,-0.3330,-0.3711,-0.3700,-0.3467,-0.3700,-0.0233, + 28.800,-0.3700,-0.3498,-0.3628,-0.3685,-0.3700,-0.3761,-0.3700, 0.0061, + 28.820,-0.3700,-0.3415,-0.3330,-0.3711,-0.3700,-0.3417,-0.3700,-0.0283, + 28.840,-0.3700,-0.3498,-0.4042,-0.3685,-0.3700,-0.3853,-0.3700, 0.0153, + 28.860,-0.3700,-0.3415,-0.3330,-0.3711,-0.3700,-0.3487,-0.3700,-0.0213, + 28.880,-0.3700,-0.3498,-0.4041,-0.3685,-0.3700,-0.3856,-0.3700, 0.0156, + 28.900,-0.3700,-0.3415,-0.3330,-0.3711,-0.3700,-0.3388,-0.3700,-0.0312, + 28.920,-0.3700,-0.3498,-0.4042,-0.3685,-0.3700,-0.3796,-0.3700, 0.0096, + 28.940,-0.3700,-0.3415,-0.3330,-0.3711,-0.3700,-0.3484,-0.3700,-0.0216, + 28.960,-0.3700,-0.3498,-0.4041,-0.3685,-0.3700,-0.3791,-0.3700, 0.0091, + 28.980,-0.3700,-0.3415,-0.3329,-0.3711,-0.3700,-0.3435,-0.3700,-0.0265, + 29.000,-0.3700,-0.3498,-0.4042,-0.3685,-0.3700,-0.3883,-0.3700, 0.0183, + 29.020,-0.3700,-0.3415,-0.4051,-0.3711,-0.3700,-0.3504,-0.3700,-0.0196, + 29.040,-0.3700,-0.3498,-0.3783,-0.3685,-0.3700,-0.3886,-0.3700, 0.0186, + 29.060,-0.3700,-0.3415,-0.3520,-0.3711,-0.3700,-0.3405,-0.3700,-0.0295, + 29.080,-0.3700,-0.3498,-0.3995,-0.3685,-0.3700,-0.3827,-0.3700, 0.0127, + 29.100,-0.3700,-0.3415,-0.3638,-0.3711,-0.3700,-0.3501,-0.3700,-0.0199, + 29.120,-0.3700,-0.3498,-0.4017,-0.3685,-0.3700,-0.3821,-0.3700, 0.0121, + 29.140,-0.3700,-0.3415,-0.3620,-0.3711,-0.3700,-0.3452,-0.3700,-0.0248, + 29.160,-0.3700,-0.3498,-0.4017,-0.3685,-0.3700,-0.3913,-0.3700, 0.0213, + 29.180,-0.3700,-0.3415,-0.3608,-0.3711,-0.3700,-0.3522,-0.3700,-0.0178, + 29.200,-0.3700,-0.3499,-0.3908,-0.3685,-0.3700,-0.3869,-0.3700, 0.0169, + 29.220,-0.3700,-0.3940,-0.3492,-0.3711,-0.3700,-0.3484,-0.3700,-0.0216, + 29.240,-0.3700,-0.2967,-0.3923,-0.3688,-0.3700,-0.3825,-0.3700, 0.0125, + 29.260,-0.3700,-0.3359,-0.3500,-0.3715,-0.3700,-0.3468,-0.3700,-0.0232, + 29.280,-0.3700,-0.3450,-0.3927,-0.3728,-0.3700,-0.3854,-0.3700, 0.0154, + 29.300,-0.3700,-0.3375,-0.3503,-0.3704,-0.3700,-0.3467,-0.3700,-0.0233, + 29.320,-0.3700,-0.3485,-0.3928,-0.3685,-0.3700,-0.3895,-0.3700, 0.0195, + 29.340,-0.3700,-0.3940,-0.3505,-0.3709,-0.3700,-0.3567,-0.3700,-0.0133, + 29.360,-0.3700,-0.3513,-0.3927,-0.3685,-0.3700,-0.3860,-0.3700, 0.0160, + 29.380,-0.3700,-0.3870,-0.3507,-0.3711,-0.3700,-0.3514,-0.3700,-0.0186, + 29.400,-0.3700,-0.3522,-0.3926,-0.3685,-0.3700,-0.3850,-0.3700, 0.0150, + 29.420,-0.3700,-0.3432,-0.3508,-0.3711,-0.3700,-0.3486,-0.3700,-0.0214, + 29.440,-0.3700,-0.3503,-0.3927,-0.3685,-0.3700,-0.3836,-0.3700, 0.0136, + 29.460,-0.3700,-0.3420,-0.3507,-0.3711,-0.3700,-0.3478,-0.3700,-0.0222, + 29.480,-0.3700,-0.3498,-0.3927,-0.3685,-0.3700,-0.3925,-0.3700, 0.0225, + 29.500,-0.3700,-0.3416,-0.3507,-0.3711,-0.3700,-0.3569,-0.3700,-0.0131, + 29.520,-0.3700,-0.3497,-0.3927,-0.3685,-0.3700,-0.3887,-0.3700, 0.0187, + 29.540,-0.3700,-0.3415,-0.3506,-0.3711,-0.3700,-0.3520,-0.3700,-0.0180, + 29.560,-0.3700,-0.3497,-0.3928,-0.3685,-0.3700,-0.3877,-0.3700, 0.0177, + 29.580,-0.3700,-0.3415,-0.3505,-0.3711,-0.3700,-0.3502,-0.3700,-0.0198, + 29.600,-0.3700,-0.3497,-0.3928,-0.3685,-0.3700,-0.3865,-0.3700, 0.0165, + 29.620,-0.3700,-0.3414,-0.3505,-0.3711,-0.3700,-0.3495,-0.3700,-0.0205, + 29.640,-0.3700,-0.3497,-0.3930,-0.3685,-0.3700,-0.3913,-0.3700, 0.0213, + 29.660,-0.3700,-0.3872,-0.3503,-0.3711,-0.3700,-0.3610,-0.3700,-0.0090, + 29.680,-0.3700,-0.3521,-0.3931,-0.3685,-0.3700,-0.3877,-0.3700, 0.0177, + 29.700,-0.3700,-0.3885,-0.3502,-0.3711,-0.3700,-0.3561,-0.3700,-0.0139, + 29.720,-0.3700,-0.3528,-0.3931,-0.3685,-0.3700,-0.3867,-0.3700, 0.0167, + 29.740,-0.3700,-0.3889,-0.3502,-0.3711,-0.3700,-0.3544,-0.3700,-0.0156, + 29.760,-0.3700,-0.3530,-0.3929,-0.3685,-0.3700,-0.3855,-0.3700, 0.0155, + 29.780,-0.3700,-0.3890,-0.3505,-0.3711,-0.3700,-0.3536,-0.3700,-0.0164, + 29.800,-0.3700,-0.3531,-0.3927,-0.3685,-0.3700,-0.3904,-0.3700, 0.0204, + 29.820,-0.3700,-0.3890,-0.3508,-0.3711,-0.3700,-0.3568,-0.3700,-0.0132, + 29.840,-0.3700,-0.4018,-0.3926,-0.3740,-0.3700,-0.3918,-0.3700, 0.0218, + 29.860,-0.3700,-0.3910,-0.3507,-0.3661,-0.3700,-0.3569,-0.3700,-0.0131, + 29.880,-0.3700,-0.3591,-0.3926,-0.3712,-0.3700,-0.3863,-0.3700, 0.0163, + 29.900,-0.3700,-0.4018,-0.3508,-0.3735,-0.3700,-0.3549,-0.3700,-0.0151, + 29.920,-0.3700,-0.3567,-0.3927,-0.3685,-0.3700,-0.3847,-0.3700, 0.0147, + 29.940,-0.3700,-0.4016,-0.3506,-0.3738,-0.3700,-0.3544,-0.3700,-0.0156, + 29.960,-0.3700,-0.3568,-0.3928,-0.3681,-0.3700,-0.3895,-0.3700, 0.0195, + 29.980,-0.3700,-0.4021,-0.3506,-0.3687,-0.3700,-0.3574,-0.3700,-0.0126, diff --git a/src/lockgate/Schip/INGO2.FOR b/src/lockgate/Schip/INGO2.FOR new file mode 100644 index 0000000..5ae94d9 --- /dev/null +++ b/src/lockgate/Schip/INGO2.FOR @@ -0,0 +1,256 @@ + PROGRAM INGO2 + +C - INVAREN SLUIS +C - Schematische berekening van max. golfhoogten in sluiskolk tijdens +C invaart / Constant schroefvermogen totdat boeg 1/3 van de +C sluislengte ingevaren is +C - Versie 1.00, rekenhart van INVA3 +C - Waterloopkundig Laboratorium Delft +C - A. Vrijburcht, 13 september 1993 + + +C=====DECLARATIES======================================== + + integer i, j + real hv, bv, hk, bk + real ms, ls, bs, ds, Ps + real Cp, Cf, Cz, Ck, Cr, lamb + real xi, xo, xe, lk + real rho, g + real Av, Ak, As, Ss, Fr, x, dx, dPs, dhk + real Xw1, Xw2, p, vs, dvs, t, dt, vsi + real A, B, C, uk, nk, uv, zv, Ee + real vso, to, tfe, tff, xf, te, vse, ton + real lamb1, lamb2, lamb3, lamb4 + real lam1, lam2, lam3 + + +C=====INVOER============================================ + + open (1,file=' ') + + read (1,*) hv, bv, lk, hk, bk + read (1,*) ms, ls, bs, ds, Ps + read (1,*) Cp, Cf, Cz, Ck, Cr + +C.....Toelichting Invoer +C hv = waterdiepte voorhaven [m] +c bv = breedte voorhaven [m] +c lk = lengte kolk [m] +c hk = maximum waterdiepte kolk [m] +c bk = breedte kolk [m] +C ms = massa schip [kg] +c ls = lengte schip [m] +c bs = breedte schip [m] +c ds = diepgang schip [m] +c Ps = maximum motorvermogen schip [W] +C Cp = coefficient drukweerstand schip, stel 0.2 [-] +c Cf = coefficient wrijvingsweerstand schip, stel 0.002 [-] +c Cz = coefficient hekvertraging schip, stel voor duweenheden 0.6 +c en stel voor overige schepen 0.25 [-] +c Ck = coefficient kolkgolf schip, stel 1.00 [-] +c Cr = omrekenfactor schroefkracht, stel voor duweenheden 5.5 +c en stel voor overige schepen 7.35 [W/N] + + close (1) + open (2,file=' ') + open (3,file=' ') + + +c Vaste waarden + rho = 1000. + g = 9.81 + xi = -1000. + Av = bv*hv + As = bs*ds + Ss = (bs+2*ds)*ls + + dhk = (hk-ds)/21 + dPs = .04*Ps + + +C=====BEREKENING========================================= + + do 500 i = 1,20 + hk = hk - dhk + Ak = bk*hk + Ps = .0 + + + do 400 j = 1,25 + Ps = Ps + dPs + Fr = Ps/Cr + vsi = .9*sqrt(Fr/(.5*rho*(Cp*As+Cf*Ss))) + +c Lopende variabelen: +c t = tijd [s] +c x = plaats boeg in x-assenstelsel [m] +c vs = vaarsnelheid [m/s] + +c Startwaarden: + t = 0 + x = xi + vs = vsi + + +C=====Snelheid in voorhaven======================================== + 100 continue + +c lengtestap in voorhaven is 1 m + dx = 1 + if (vs .le. .01) vs = .01 + + 110 continue + + if (vs .le. .25) then + dx = .10 + else + dx = 1.00 + endif + dt = dx/vs + x = x + dx + +c vereenv. oplossing van waterpiegelafzinking uit Schijf: +c vs*Av = (vs+uv)*(Av-As-bv*zv) en +c 2*g*zv + (vs+uv)**2 = vs**2 + A = 3*vs + B = 2*vs**2 - 2*g*(Av-As)/bv + C = 2*g*vs*As/bv + uv = (-B-sqrt(abs(B**2-4*A*C)))/(2*A) + zv = (uv**2 + 2*vs*uv) / (2*g) + +c Xw1 = weerstand in voorhaven tgv. drukweerstand, +c wrijvingsweerstand en vertragingsverlies hek + Xw1 = .5*rho*(Cp*As +Cf*Ss*((vs+uv)/vs)**2) + & +Cz*rho*g*As*zv/vs**2 + + dvs = (-Xw1*vs**2+Fr)/(1.2*ms) + vs = vs + dvs*dt + t = t + dt +c write (2,150) t, x, vs, -zv + +c testen op constante vaarsnelheid tbv. overgang voorhaven/sluis + if (abs(dvs) .gt. .0001) then + goto 110 + else + x = .0 + xo = .0 + t = .0 + to = t + vso = vs + xe = lk + xf = x + tfe = 10000.0 + tff = 10000.0 + goto 200 + endif + + +C=====Snelheid in kolk==================================== + 200 continue + +c lengtestap in sluis is 1 m + dx = 1 +c lamb is contractie stroming na boeg schip, +c is gesteld op 1 (geen contractie) + lamb= 1 + if (vs .le. 0) vs = .01 + + 210 continue + x = x + dx + dt = dx/vs + + if (x .ge. (xo+bs/2) .and. x .lt. (xo+bs/2+dx)) ton = t + +c xf is voorzijde front transl. golf + if (t .lt. tfe) then + xf = xf + dt*sqrt(g*hk) + if (xf .gt. xe) tfe = t + elseif (t .lt. tff) then + xf = xf - dt*sqrt(g*hk) + if (xf .lt. x) tff = t + else + xf = xf - dt*sqrt(g*hk) + endif + +c vereenv. oplossing van waterspiegelafzinking uit Schijf: +c vs*Av = (vs+uv)*(Ak-As-bv*zv) en +c 2*g*zv + (vs+uv)**2 = vs**2 + A = 3*vs + B = 2*vs**2 - 2*g*(Av-As)/bv + C = 2*g*vs*As/bv + uv = (-B-sqrt(abs(B**2-4*A*C)))/(2*A) + zv = (uv**2 + 2*vs*uv) / (2*g) + +c oplossing van golfhoogte kolk uit: +c vs*(As+bk*nk) = nk*sqrt(g*hk) + (Ak-As)*uk en +c 2*g*nk + vs**2 = (vs+uk)**2 + A = bk* (sqrt(g*hk)-vs)/(2*g) + B = bk*vs*(sqrt(g*hk)-vs)/g +lamb*(Ak-As) + C = -vs*As + uk = (-B+sqrt(abs(B**2-4*A*C)))/(2*A) + nk = uk**2/(2*g) + vs*uk/g + + if (t .eq. ton) lamb1 = nk/(vso*As/(bk*sqrt(g*hk))) + if (t .eq. ton) lamb2 = (nk+zv)/(vso*As/(bk*sqrt(g*hk))) + if (t .eq. tff) lamb3 = lamb1+(nk+zv)/(vso*As/(bk*sqrt(g*hk))) + if (t .eq. ton) lam1 = nk + if (t .eq. ton) lam2 = nk+zv + if (t .eq. tff) lam3 = lam1+nk+zv + +c Xw2 = weerstand in sluis tgv. drukweerstand in kolk, +c wrijvingsweerstand in kolk, vertragingsverlies +c hek in voorhaven en translatiegolf in sluis + Xw2 =.5*rho*(Cp*As +Cf*Ss*((vs+uk)/vs)**2) + & +Cz*rho*g*As*zv/vs**2 + & +Ck*rho*g*As*nk/vs**2 + + if (x .gt. lk/3) Fr = .0 + dvs = (-Xw2*vs**2+Fr)/(1.2*ms) + vs = vs + dvs*dt + if (vs .lt. .01) goto 300 + t = t + dt +c write (2,160) t, x, vs, -zv, nk, xf + + if (x .lt. (xe-dx)) then + goto 210 + else + te = t + vse = vs + lamb4 = vse/vso +c Ee = energie bij beschouwde deur, toeg.watermassa 20 % +c Ee = 0.5*1.2*ms*vs**2 + goto 300 + endif + + +C=====EINDUITVOER=============================================== + + 300 continue + write (2,252) vso/sqrt(g*hk),As/Ak,lamb1,lamb2,lamb3,lamb4 + write (3,253) vso, Ak, lam1, lam2, lam3, vse, tff, te + + 400 continue + + 500 continue + +c 160 format (F8.2,', ',F8.2,', ',4(F8.3,', ')) + 252 format (6(F7.4,',')) + 253 format (6(F7.3,','),2(F7.1,',')) + +C TOELICHTING UITVOER +c vso = snelheid bij invaart kolk +c lam1 = translatiegolfhoogte bij invaart +c lam2 = translatiegolfhoogte + waterspiegelafzinking bij invaart +c lam3 = translatiegolfhoogte + waterspiegelafzinking bij moment +c dat front transl. golf de boeg bereikt +c vse = vaarsnelheid bij aanvaren gesloten deur +c to = moment invaren kolk +c tff = moment front transl. golf bereikt boeg +c te = moment aanvaren gesloten deur + + + close (2) + close (3) + end + diff --git a/src/lockgate/Schip/INTER.FOR b/src/lockgate/Schip/INTER.FOR new file mode 100644 index 0000000..d3d864a --- /dev/null +++ b/src/lockgate/Schip/INTER.FOR @@ -0,0 +1,31 @@ + SUBROUTINE INTER (n,x,y,x1,y1) + +C********************************************************************** +c interpoleert lineair tussen de punten in de tabel +c als x1.lt.x(1) dan y1=x(1); als x1.gt.x(n) dan y1=x(n) +c de tabel moet stijgend zijn +c n : aantal waarden in de tabel (in) +c x(n): array met x-waarden (in) +c y(n): array met y-waarden (in) +c x1 : x waarvoor functiewaarde gezocht wordt (in) +c y1 : bevat bij return y(x1) (uit) +C********************************************************************** + + Integer n, i, j + Real x(1:500), y(1:500), x1, y1 + + j=0 + do 10 i=1,n + 10 if (x1 .gt. x(i)) j=i + + if (j .le. 0) then + y1 = y(1) + else if (j .ge. n) then + y1 = y(n) + else + y1 = (y(j)*(x(j+1)-x1)+y(j+1)*(x1-x(j)))/(x(j+1)-x(j)) + endif + + end + + diff --git a/src/lockgate/Schip/INTER.py b/src/lockgate/Schip/INTER.py new file mode 100644 index 0000000..927559b --- /dev/null +++ b/src/lockgate/Schip/INTER.py @@ -0,0 +1,38 @@ +def inter(n, x, y, x1): + """ + Interpoleert linear tussen de punten in de tabel. + Als x1 < x[0] dan y1 = x[1]; als x1 > x[n] dan y1=x[n] linear interpolation between the points in the table. + De tabel moet stijgend zijn + n: aantal waardes in de tabel + x[n]: lijst van x-waardes (tijd) + y[n]: lijst van y-waardes (golfhoogte) + x1: x waarvoor de functie waarde gezocht wordt + y1: bevat de return y[x1] uit + + Args: + - n: number of values in the table (int) + - x: list of x-values (list of floats) + - y: list of y-values (list of floats) + - x1: x-value for which y-value is to be interpolated (float) + + Returns: + - y1: interpolated y-value (float) + """ + + # Initialize j + j = 0 + + for i in range(0,n): + if x1 > x[i]: + j = i + + if j <= 0: + y1 = y[0] + + elif j >= n - 1: + y1 = y[n - 1] + + else: + y1 = (y[j] * (x[j+1] - x1) + y[j+1] * (x1 - x[j])) / (x[j+1] - x[j]) + + return y1 \ No newline at end of file diff --git a/src/lockgate/Schip/INVA3.FOR b/src/lockgate/Schip/INVA3.FOR new file mode 100644 index 0000000..5fd4dc1 --- /dev/null +++ b/src/lockgate/Schip/INVA3.FOR @@ -0,0 +1,256 @@ + PROGRAM INVA3 + +C - INVAREN SLUIS +C - Schematische berekening van vaarsnelheid in voorhaven en sluis bij: +C . gegeven initiele, eenparige vaarsnelheid +C . gegeven schroefvermogen +C . schroefkracht constant tot de gegeven plaats van schroefuitval +C - Voor berekening van vaarsnelheid en kin. energie bij 2e sluisdeur +C - Versie 1.00, zelfde als INVA4, wegschrijven tijd- en einduitvoer +C - Waterloopkundig Laboratorium Delft +C - A. Vrijburcht, 19 november 1991 + + +C=====DECLARATIES======================================== + + real hv, bv, hk, bk + real ms, ls, bs, ds, Ps + real Cp, Cf, Cz, Ck, Cr, alfa + real xi, xo, xe, xu, vsi + real rho, g + real Av, Ak, As, Ss, Fr, x, dx + real Xw1, Xw2, p, vs, dvs, t, dt, pu, vsu + real A, B, C, uk, nk, uv, zv, Ee + real uvi, zvi + + +C=====INVOER============================================ + + open (1,file=' ') + + read (1,*) hv, bv, hk, bk + read (1,*) ms, ls, bs, ds, Ps + read (1,*) Cp, Cf, Cz, Ck, Cr + read (1,*) xi, xo, xe, xu, vsi + +C.....Toelichting Invoer +C hv = waterdiepte voorhaven [m] +c bv = breedte voorhaven [m] +c hk = waterdiepte kolk [m] +c bk = breedte kolk [m] +C ms = massa schip [kg] +c ls = lengte schip [m] +c bs = breedte schip [m] +c ds = diepgang schip [m] +c Ps = motorvermogen schip [W] +C Cp = coefficient drukweerstand schip, stel 0.2 [-] +c Cf = coefficient wrijvingsweerstand schip, stel 0.002 [-] +c Cz = coefficient hekvertraging schip, stel voor duweenheden 0.6 +c en stel voor overige schepen 0.25 [-] +c Ck = coefficient kolkgolf schip, stel 1.00 [-] +c Cr = omrekenfactor schroefkracht, stel voor duweenheden 5.5 +c en stel voor overige schepen 7.35 [W/N] +C xi = initiele x van boeg [m] +c xo = x van sluisingang [m] +c xe = x van beschouwde deur [m] +c xu = x van afslaan motor [m] +c vsi = initiele snelheid schip [m/s] + + close (1) + open (2,file=' ') + + +C=====BEREKENING========================================= + +c Vaste waarden + rho = 1000 + g = 9.81 + +c Doorsneden, ed. + Av = bv*hv + Ak = bk*hk + As = bs*ds + Ss = (bs+2*ds)*ls + Fr = Ps/Cr + +c Lopende variabelen: +c t = tijd [s] +c x = plaats boeg in x-assenstelsel [m] +c vs = vaarsnelheid [m/s] + +c Startwaarden: + t = 0 + x = xi + if (vsi .le. .01) vsi = .01 + vs = vsi + A = 3*vsi + B = 2*vsi**2 - 2*g*(Av-As)/bv + C = 2*g*vsi*As/bv + uvi = (-B-sqrt(abs(B**2-4*A*C)))/(2*A) + zvi = (uvi**2 + 2*vsi*uvi) / (2*g) + write (2,150) t, x, vsi, -zvi + + if (xi .lt. (xo+.5*bs)) then + goto 100 + else + goto 200 + endif + + +C=====Snelheid in voorhaven======================================== + 100 continue + +c lengtestap in voorhaven is 1 m + dx = 1 + if (vs .le. .01) vs = .01 + + 110 continue + + if (vs .le. .25) then + dx = .10 + else + dx = 1.00 + endif + dt = dx/vs + x = x + dx + +c schroef valt eventueel uit na xu + if (x .lt. xu) then + Fr = Fr + else + Fr = 0 + endif + +c vereenv. oplossing van waterpiegelafzinking uit Schijf: +c vs*Av = (vs+uv)*(Av-As-bv*zv) en +c 2*g*zv + (vs+uv)**2 = vs**2 + A = 3*vs + B = 2*vs**2 - 2*g*(Av-As)/bv + C = 2*g*vs*As/bv + uv = (-B-sqrt(abs(B**2-4*A*C)))/(2*A) + zv = (uv**2 + 2*vs*uv) / (2*g) + +c Xw1 = weerstand in voorhaven tgv. drukweerstand, +c wrijvingsweerstand en vertragingsverlies hek + Xw1 = .5*rho*(Cp*As +Cf*Ss*((vs+uv)/vs)**2) + & +Cz*rho*g*As*zv/vs**2 + + dvs = (-Xw1*vs**2+Fr)/(1.2*ms) + vs = vs + dvs*dt + t = t + dt + write (2,150) t, x, vs, -zv + + if (vs .le. 0.01) then + goto 310 + else + goto 130 + endif + + 130 continue +c testen op einde vaarweg + if (x .lt. (xe-dx)) then + goto 140 + else + goto 300 + endif + + 140 continue +c testen op overgang voorhaven/sluis + if (x .lt. (xo+.5*bs)) then + goto 110 + else + goto 200 + endif + + +C=====Snelheid in kolk==================================== + 200 continue + +c lengtestap in sluis is 1 m + dx = 1 +c alfa is contractie stroming na boeg schip, +c is gesteld op 1 (geen contractie) + alfa= 1 + if (vs .le. 0) vs = .01 + + 210 continue + x = x + dx + dt = dx/vs +c schroef valt eventueel uit na xu + if (x .lt. xu) then + Fr = Fr + else + Fr = 0 + endif + +c vereenv. oplossing van waterpiegelafzinking uit Schijf: +c vs*Av = (vs+uv)*(Ak-As-bv*zv) en +c 2*g*zv + (vs+uv)**2 = vs**2 + A = 3*vs + B = 2*vs**2 - 2*g*(Av-As)/bv + C = 2*g*vs*As/bv + uv = (-B-sqrt(abs(B**2-4*A*C)))/(2*A) + zv = (uv**2 + 2*vs*uv) / (2*g) + +c oplossing van golfhoogte kolk uit: +c vs*(As+bk*nk) = nk*sqrt(g*hk) + (Ak-As)*uk en +c 2*g*nk + vs**2 = (vs+uk)**2 + A = bk* (sqrt(g*hk)-vs)/(2*g) + B = bk*vs*(sqrt(g*hk)-vs)/g +alfa*(Ak-As) + C = -vs*As + uk = (-B+sqrt(abs(B**2-4*A*C)))/(2*A) + nk = uk**2/(2*g) +vs*uk/g + +c Xw2 = weerstand in sluis tgv. drukweerstand in kolk, +c wrijvingsweerstand in kolk, vertragingsverlies +c hek in voorhaven en translatiegolf in sluis + Xw2 =.5*rho*(Cp*As +Cf*Ss*((vs+uk)/vs)**2) + & +Cz*rho*g*As*zv/vs**2 + & +Ck*rho*g*As*nk/vs**2 + + dvs = (-Xw2*vs**2+Fr)/(1.2*ms) + vs = vs + dvs*dt + t = t + dt + write (2,160) t, x, vs, -zv, nk + + if (vs .le. 0.01) then + goto 310 + else + goto 230 + endif + + 230 continue + if (x .lt. (xe-dx)) then + goto 210 + else + goto 300 + endif + + +C=====EINDUITVOER=============================================== + + 300 continue +c Ee = energie bij beschouwde deur, toeg.watermassa 20 % + Ee = 0.5*1.2*ms*vs**2 + write (2,250) hv, bv, hk, bk, ms, ls, bs, ds, Ps, + & xi, xo, xe, xu, vsi, vs, Ee + goto 400 + + 310 continue + write (2,250) hv, bv, hk, bk, ms, ls, bs, ds, Ps, + & xi, xo, xe, xu, vsi, .0, .0 + goto 400 + + 150 format (F8.2,', ',F8.2,', ',F8.4,', ',F8.4) + 160 format (F8.2,', ',F8.2,', ',F8.4,', ',F8.4,', ',F8.4) + 250 format (4(F7.2,','),F10.0,',', + & 3(F7.2,','),F10.0,',', + & 4(F9.2,','),2(F8.3,','),F10.0) + + 400 continue + close (2) + end + + + + diff --git a/src/lockgate/Schip/Inv_Sam_nz.IN b/src/lockgate/Schip/Inv_Sam_nz.IN new file mode 100644 index 0000000..7f316d5 --- /dev/null +++ b/src/lockgate/Schip/Inv_Sam_nz.IN @@ -0,0 +1,17 @@ +HKI = 0.00 +ZK = -4.00 +LKK = 10.00 +LKAS = 10.00 +BKAS = 1.00 +BA = 0.05 +BB = 0.50 +AO = 0 +MU = 0.70 +DT = 0.02 +TINIT = -6.0 +TEND = 30.00 +M0 = 1 +VS = 1.40 +NT1 = 5 +T1 = -20.00, 0.00, 0.02, 35.00, 35.01 +N1 = 0.00, 0.00, -0.37, -0.37, -0.37 diff --git a/src/lockgate/Schip/Inv_Sam_nz_OG.IN b/src/lockgate/Schip/Inv_Sam_nz_OG.IN new file mode 100644 index 0000000..c164ef8 --- /dev/null +++ b/src/lockgate/Schip/Inv_Sam_nz_OG.IN @@ -0,0 +1,17 @@ +HKI = 0.00 +ZK = -4.00 +LKK = 10.00 +LKAS = 10.00 +BKAS = 1.00 +BA = 0.05 +BB = 0.50 +AO = 0 +MU = 0.70 +DT = 0.02 +TINIT = -6.0 +TEND = 30.00 +M0 = 0 +VS = 1.40 +NT1 = 6 +T1 = -20.00, 0.00, 0.02, 35.00, 35.01, 100.00 +N1 = 0.00, 0.00, -0.37, -0.37, -0.37, -0.37 diff --git a/src/lockgate/Schip/Inv_Sam_nz_OG.IN.png b/src/lockgate/Schip/Inv_Sam_nz_OG.IN.png new file mode 100644 index 0000000..87212f7 Binary files /dev/null and b/src/lockgate/Schip/Inv_Sam_nz_OG.IN.png differ diff --git a/src/lockgate/Schip/Inv_Sam_nz_OG.png b/src/lockgate/Schip/Inv_Sam_nz_OG.png new file mode 100644 index 0000000..507da51 Binary files /dev/null and b/src/lockgate/Schip/Inv_Sam_nz_OG.png differ diff --git a/src/lockgate/Schip/KASGOLF.FOR b/src/lockgate/Schip/KASGOLF.FOR new file mode 100644 index 0000000..77607bc --- /dev/null +++ b/src/lockgate/Schip/KASGOLF.FOR @@ -0,0 +1,347 @@ + PROGRAM KASGOLF + +C Doordringen van golf van langsvarend schip in de deurkas +C Versie 1.00 +C Waterloopkundig Laboratorium Delft +C A. Vrijburcht, 7 september 1993 + + +C=====DECLARATIES======================================== + + INTEGER I, J, K, N, L, P, NT1, M1, NT2, M2 + INTEGER NKAS, NK, M0 + + REAL T, TINIT, TEND, DT, G + REAL HKI, ZK, LKK, VS + REAL LKAS, BKAS, BA, BB, AO, MU + REAL T1(0:20), N1(0:20) + REAL T2(0:20), N2(0:20) + + REAL CK, DTT, DTG + REAL NKASR, HKAS + REAL NV, NW, NA, NB, NAO, NBO, NAN, NBN + REAL NAT, NBT + REAL QAT, QBT + REAL HV, HW, HA, HB + REAL G1, G2, G3, G4, G5, G6, G7, G8, G9, GGEM + REAL H1, H2, H3, H4, H5, H6, H7, H8, H9, HGEM + REAL QA(0:1000), QB(0:1000), QAA, QBB + + +C=====INVOER===================================================== + + OPEN (1,FILE=' ') + READ (1,*) HKI, ZK + READ (1,*) LKK + READ (1,*) LKAS, BKAS, BA, BB, AO, MU + READ (1,*) DT, TINIT, TEND + READ (1,*) M0, VS + READ (1,*) NT1 + DO 30 M1 = 1, NT1 + READ (1,*) T1(M1), N1(M1) + 30 CONTINUE + CLOSE (1) + +c.....TOELICHTING INVOER +c HKI = initiele waterstand [mNAP] +c ZK = niveau kolk- en deurkasbodem [mNAP] +c LKK = lengte deurkas kolkzijde [m] +c LKAS = lengte deurkas kaszijde [m] +c BKAS = breedte deurkas kaszijde [m] +c BA = breedte verticale spleet A [m] +c BB = breedte verticale spleet B [m] +c AO = oppervlakte deuropeningen incl. onderzijde deur [m2] +c MU = afvoercoeff. verticale spleten A en B [-] +c DT = tijdstap [s] +c TINIT = begintijd [s] +c TEND = eindtijd [s] +c M0 = keuze golf met translatiegolfsnelheid (=0) +c of vaarsnelheid (=1) (integer!) +c VS = vaarsnelheid [m/s] +c M1 = aantal op te geven punten tabel (integer!) +c T1 = tijd tabel [s] +c N1 = golfhoogte kolkzijde tpv spleet A [m] + + G = 9.81 + + OPEN (2,FILE=' ') + + +C=====INITITALISATIE=============================================== + +C.....STARTWAARDEN VOOR GOLVEN + J = 0 + K = 0 + T = TINIT + HKAS = HKI + DO 100 I = 0,1000 + QA(I) = 0 + QB(I) = 0 + 100 CONTINUE + QAT = 0 + QBT = 0 + NA = 0 + NB = 0 + NAT = 0 + NBT = 0 + +c.....LENGTE ARRAY VOOR GOLVEN + CK = SQRT(G*(HKI-ZK)) + IF (M0 .EQ. 0) THEN + DTG = LKK/CK + ELSE + DTG = LKK/VS + ENDIF + NKASR = LKAS/CK/DT + NKAS = NINT (NKASR) + NK = NINT (NKAS/10) + N = INT(1.1*NKAS) + IF (N .GE. 1000) THEN + WRITE (*,*) 'VERGROOT TIJDSTAP' + STOP + ENDIF + + +C=====BEREKENING TRANSLATIEGOLVEN IN DEURKAS===================== + + 200 CONTINUE + J = J+1 + K = K+1 + T = T+DT + CALL INTER (NT1,T1,N1,T,NV) + CALL INTER (NT1,T1,N1,T-DTG,NW) + +c.....berekening tot array zijn maximum bereikt + IF (J .LE. N) THEN + + P = 0 +c.......inkomende debieten + IF (J .GE. NKAS) THEN + QAT = QB(J-NKAS) + QBT = QA(J-NKAS) + ENDIF +c.......inkomende golfhoogten + NAT = -QAT / (BKAS*CK) + NBT = QBT / (BKAS*CK) + 201 CONTINUE + P = P + 1 +c.......oude gegenereerde golfhoogten + NAO = NA + NBO = NB +c.......nieuwe gegenereerde debieten + QA(J) = MU*BA*(HKI-ZK)* + & SIGN(1,(NV-NA-NAT))*SQRT(2*G*ABS(NV-NA-NAT)) - QAT + QB(J) = MU*BB*(HKI-ZK)* + & SIGN(1,(NB+NBT-NW))*SQRT(2*G*ABS(NB+NBT-NW)) - QBT +c.......nieuwe gegenereerde golfhoogten + NAN = QA(J) / (BKAS*CK) + NBN = -QB(J) / (BKAS*CK) +c.......gecorrigeerde gegenereerde golfhoogten + NA = (1.8*NAO+0.2*NAN)/2 + NB = (1.8*NBO+0.2*NBN)/2 +c.......test voldoende nauwkeurige gegenereerde golfhoogten + IF (P . GT. 1000) GOTO 202 + IF (ABS(NAO-NA) .GE. .001) GOTO 201 + IF (ABS(NBO-NB) .GE. .001) GOTO 201 + 202 CONTINUE + +c.....waterstanden deurkas + HV = HKI + NV + HA = HKAS + NA + NAT + IF (J .GE. 9*NK) THEN + H1 = HKAS + (QA(J-NK) - QB(J-9*NK)) / (BKAS*CK) + H9 = HKAS + (QA(J-9*NK) - QB(J-NK)) / (BKAS*CK) + ELSEIF (J .GE. NK) THEN + H1 = HKAS + QA(J-NK) / (BKAS*CK) + H9 = HKAS - QB(J-NK) / (BKAS*CK) + ELSE + H1 = HKAS + H9 = HKAS + ENDIF + IF (J .GE. 8*NK) THEN + H2 = HKAS + (QA(J-2*NK) - QB(J-8*NK)) / (BKAS*CK) + H8 = HKAS + (QA(J-8*NK) - QB(J-2*NK)) / (BKAS*CK) + ELSEIF (J .GE. 2*NK) THEN + H2 = HKAS + QA(J-2*NK) / (BKAS*CK) + H8 = HKAS - QB(J-2*NK) / (BKAS*CK) + ELSE + H2 = HKAS + H8 = HKAS + ENDIF + IF (J .GE. 7*NK) THEN + H3 = HKAS + (QA(J-3*NK) - QB(J-7*NK)) / (BKAS*CK) + H7 = HKAS + (QA(J-7*NK) - QB(J-3*NK)) / (BKAS*CK) + ELSEIF (J .GE. 3*NK) THEN + H3 = HKAS + QA(J-3*NK) / (BKAS*CK) + H7 = HKAS - QB(J-3*NK) / (BKAS*CK) + ELSE + H3 = HKAS + H7 = HKAS + ENDIF + IF (J .GE. 6*NK) THEN + H4 = HKAS + (QA(J-4*NK) - QB(J-6*NK)) / (BKAS*CK) + H6 = HKAS + (QA(J-6*NK) - QB(J-4*NK)) / (BKAS*CK) + ELSEIF (J .GE. 4*NK) THEN + H4 = HKAS + QA(J-4*NK) / (BKAS*CK) + H6 = HKAS - QB(J-4*NK) / (BKAS*CK) + ELSE + H4 = HKAS + H6 = HKAS + ENDIF + IF (J .GE. 5*NK) THEN + H5 = HKAS + (QA(J-5*NK) - QB(J-5*NK)) / (BKAS*CK) + ELSE + H5 = HKAS + ENDIF + HB = HKAS + NB + NBT + HW = HKI + NW + HGEM = HKAS+(.5*HA+H1+H2+H3+H4+H5+H6+H7+H8+H9+.5*HB)/10 + + QAA = QA(J) + QAT + QBB = QB(J) + QBT + +c.....berekening nadat array zijn maximum bereikt heeft + ELSE + +c.......inkomende debieten + QAT = QB(N-NKAS) + QBT = QA(N-NKAS) +c.......inkomende golfhoogten + NAT = -QAT / (BKAS*CK) + NBT = QBT / (BKAS*CK) + +c.......opschuiven gegenereerde debieten + DO 210 L = 1,(N-1) + QA(L) = QA(L+1) + QB(L) = QB(L+1) + 210 CONTINUE + + P = 0 + 206 CONTINUE + P = P + 1 +c.......oude gegenereerde golfhoogten + NAO = NA + NBO = NB +c.......nieuwe gegenereerde debieten + QA(N) = MU*BA*(HKI-ZK)* + & SIGN(1,(NV-NA-NAT))*SQRT(2*G*ABS(NV-NA-NAT)) - QAT + QB(N) = -MU*BB*(HKI-ZK)* + & SIGN(1,(NW-NB-NBT))*SQRT(2*G*ABS(NW-NB-NBT)) - QBT +c.......nieuwe gegenereerde golfhoogten + NAN = QA(N) / (BKAS*CK) + NBN = -QB(N) / (BKAS*CK) +c.......gecorrigeerde gegenereerde golfhoogten + NA = (1.8*NAO+0.2*NAN)/2 + NB = (1.8*NBO+0.2*NBN)/2 +c.......test voldoende nauwkeurige gegenereerde golfhoogten + IF (P . GT. 1000) GOTO 207 + IF (ABS(NAO-NA) .GE. .001) GOTO 206 + IF (ABS(NBO-NB) .GE. .001) GOTO 206 + 207 CONTINUE + +c.....waterstanden in deurkas + HV = HKI + NV + HA = HKAS + NA + NAT + IF (J .GE. 9*NK) THEN + H1 = HKAS + (QA(N-NK) - QB(N-9*NK)) / (BKAS*CK) + H9 = HKAS + (QA(N-9*NK) - QB(N-NK)) / (BKAS*CK) + ELSEIF (J .GE. NK) THEN + H1 = HKAS + QA(N-NK) / (BKAS*CK) + H9 = HKAS - QB(N-NK) / (BKAS*CK) + ELSE + H1 = HKAS + H9 = HKAS + ENDIF + IF (J .GE. 8*NK) THEN + H2 = HKAS + (QA(N-2*NK) - QB(N-8*NK)) / (BKAS*CK) + H8 = HKAS + (QA(N-8*NK) - QB(N-2*NK)) / (BKAS*CK) + ELSEIF (J .GE. 2*NK) THEN + H2 = HKAS + QA(N-2*NK) / (BKAS*CK) + H8 = HKAS - QB(N-2*NK) / (BKAS*CK) + ELSE + H2 = HKAS + H8 = HKAS + ENDIF + IF (J .GE. 7*NK) THEN + H3 = HKAS + (QA(N-3*NK) - QB(N-7*NK)) / (BKAS*CK) + H7 = HKAS + (QA(N-7*NK) - QB(N-3*NK)) / (BKAS*CK) + ELSEIF (J .GE. 3*NK) THEN + H3 = HKAS + QA(N-3*NK) / (BKAS*CK) + H7 = HKAS - QB(N-3*NK) / (BKAS*CK) + ELSE + H3 = HKAS + H7 = HKAS + ENDIF + IF (J .GE. 6*NK) THEN + H4 = HKAS + (QA(N-4*NK) - QB(N-6*NK)) / (BKAS*CK) + H6 = HKAS + (QA(N-6*NK) - QB(N-4*NK)) / (BKAS*CK) + ELSEIF (J .GE. 4*NK) THEN + H4 = HKAS + QA(N-4*NK) / (BKAS*CK) + H6 = HKAS - QB(N-4*NK) / (BKAS*CK) + ELSE + H4 = HKAS + H6 = HKAS + ENDIF + IF (J .GE. 5*NK) THEN + H5 = HKAS + (QA(N-5*NK) - QB(N-5*NK)) / (BKAS*CK) + ELSE + H5 = HKAS + ENDIF + HB = HKAS + NB + NBT + HW = HKI + NW + HGEM = HKAS+(.5*HA+H1+H2+H3+H4+H5+H6+H7+H8+H9+.5*HB)/10 + + QAA = QA(N) + QAT + QBB = QB(N) + QBT + + ENDIF + +c.....waterstand kolkzijde deur + DTT = DTG/10 + CALL INTER (NT1,T1,N1,T-1*DTT,G1) + CALL INTER (NT1,T1,N1,T-2*DTT,G2) + CALL INTER (NT1,T1,N1,T-3*DTT,G3) + CALL INTER (NT1,T1,N1,T-4*DTT,G4) + CALL INTER (NT1,T1,N1,T-5*DTT,G5) + CALL INTER (NT1,T1,N1,T-6*DTT,G6) + CALL INTER (NT1,T1,N1,T-7*DTT,G7) + CALL INTER (NT1,T1,N1,T-8*DTT,G8) + CALL INTER (NT1,T1,N1,T-9*DTT,G9) + GGEM = HKI+(.5*NV+G1+G2+G3+G4+G5+G6+G7+G8+G9+.5*NW)/10 + +c.....waterstand kaszijde deur + HKAS = HKAS - MU*AO*SIGN(1,(HGEM-GGEM))* + & SQRT(2*G*ABS(HGEM-GGEM))/BKAS/LKAS*DT + +c.....test einde berekening + IF (T .GT. TEND) GOTO 300 + +c.....test einde binnenloop + IF (K .LT. 10) THEN + GOTO 200 + ELSE + K = 0 + WRITE (2,600) T,HV,HA,H5,HB,HW,HGEM,GGEM,GGEM-HGEM + GOTO 200 + ENDIF + + 300 CONTINUE + +c.....TOELICHTING UITVOER +c T = tijd [s] +c HV = waterstand kolkzijde voor spleet A [mNAP] +c HA = waterstand kaszijde voor spleet A [mNAP] +c H5 = waterstand kaszijde midden kas [mNAP] +c HB = waterstand kaszijde voor spleet B [mNAP] +c HW = waterstand kolkzijde voor spleet B [mNAP] +c HGEM = gemiddelde waterstand in kas tpv. de deur [mNAP] +c GGEM = gemiddelde waterstand in kolk tpv. de deur [mNAP] +c GGEM-HGEM = gemiddeld verval over deur [m] + + + 600 FORMAT (F7.3,',',8(F7.4,',')) + + CLOSE (2) + + END + diff --git a/src/lockgate/Schip/KASGOLF.py b/src/lockgate/Schip/KASGOLF.py new file mode 100644 index 0000000..3fdc5b1 --- /dev/null +++ b/src/lockgate/Schip/KASGOLF.py @@ -0,0 +1,242 @@ +# PROGRAM KASGOLF + +# Doordringen van golf van langsvarend schip in de deurkas +# Versie 1.00 +# Waterloopkundig Laboratorium Delft +# A. Vrijburcht, 7 september 1993 + +# =====DECLARATIES======================================== + +import numpy as np +import os +from INTER import inter +import math +import matplotlib.pyplot as plt + +Inv_naam = 'Test_invoer.IN' + +T1 = np.zeros(21) #Tijdstabel [s] +N1 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet A [m] +T2 = np.zeros(21) #Tijdtabel 2 (?) [s] +N2 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet ? [m] + +NV=NW=0 + +QA = np.zeros(1001) #? +QB = np.zeros(1001) #? +G = 9.81 #Gravitatieversnelling [m/s^2] + +# =====INVOER===================================================== + +#HKI = #initiele waterstand [mNAP] +#ZK = #niveau kolk- en deurkasbodem [mNAP] +#LKK = #engte deurkas kolkzijde [m] +#LKAS = #lengte deurkas kaszijde [m] +#BKAS = #breedte deurkas kaszijde [m] +#BA = #breedte verticale spleet A [m] +#BB = #breedte verticale spleet B [m] +#AO = # Oppervlakte deuropening incl. onderzijde deur [m^2] +#MU = #afvoercoeff. verticale spleten A en B [-] +#DT = #tijdstap [s] +#TINIT = #start tijd [s] +#TEND = #eind tijd [s] +#M0 = #keuze golf met translatiesnelheid (=0) of vaarsnelheid (=1) +#VS = #vaarsnelheid [m/s] +#NT1 = #aantal op te geven punten tabel (integer!) + +#Uitlezen invoer bestand +Dict_inv = {} + +with open(os.path.join(os.getcwd(),Inv_naam), 'r') as file: + for line in file: + if '=' in line: + key, value = line.split('=') + key = key.strip() + value = value.strip() + if ',' in value: + value = list(map(float, value.split(','))) + else: + try: + value = float(value) + except ValueError: + value = int(value) + Dict_inv[key] = value + +Dict_inv['NT1'] = int(Dict_inv['NT1']) + +# Lengte array voor golven +J = 0 +K = 0 +T = Dict_inv['TINIT'] +HKAS = Dict_inv['HKI'] +QAT = 0 #Debiet in punt A +QBT = 0 #Debiet in punt B +NA = 0 #Gegenereerde golfhoogte punt A +NB = 0 #Gegenereerde golfhoogte punt B +NAT = 0 #Golfhoogte in punt A +NBT = 0 #Golfhoogte in punt B + +# Length of array for waves +CK = np.sqrt(G * (Dict_inv['HKI'] - Dict_inv['ZK'])) #snelheid golf +if Dict_inv['M0'] == 0: + DTG = Dict_inv['LKK'] / CK #looptijd golf in kas bij golfsnelheid (M0 == 0) +else: + DTG = Dict_inv['LKK'] / Dict_inv['VS'] #looptijd golf in kas bij vaarsnelheid (M0 == 1) + +NKASR = Dict_inv['LKAS'] / CK / Dict_inv['DT'] +NKAS = int(round(NKASR)) +NK = int(round(NKAS / 10)) +N = (Dict_inv['TEND'] - Dict_inv['TINIT'])/Dict_inv['DT']#int(1.1 * NKAS) + +# =====BEREKENING TRANSLATIEGOLVEN IN DEURKAS===================== +T_list = [] +HV_list = [] +HA_list = [] +H5_list = [] +HB_list = [] +HW_list = [] +HGEM_list = [] +GGEM_list = [] +NV_list = [] +HKAS_list= [] + +#Deze while loop stopt als Teind is bereikt +while True: + J += 1 + K += 1 + T = round(T+Dict_inv['DT'],2) + + #Berekenen waterstanden Spleet 1 (NV) en spleet 2 (NW) + NV = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) + NW = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) + + # Berekening uitvoeren tot duur van langstrekkende golf over is. + if J <= N: + + P = 0 + # inkomende debieten + if J >= NKAS: + QAT = QB[J - NKAS] + QBT = QA[J - NKAS] + + # inkomende golfhoogtes + NAT = -QAT / (Dict_inv['BKAS'] * CK) + NBT = QBT / (Dict_inv['BKAS'] * CK) + + while True: + P += 1 + + # oude gegenereerde golfhoogten + NAO = NA + NBO = NB + + # nieuwe gegenereerde debieten + QA[J] = (Dict_inv['MU'] * Dict_inv['BA'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, NV - NA - NAT) * np.sqrt(2 * G * abs(NV - NA - NAT)) - QAT) + + QB[J] = (Dict_inv['MU'] * Dict_inv['BB'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, (NB + NBT - NW)) * np.sqrt(2 * G * abs(NB + NBT - NW)) - QBT) + + # nieuwe gegenereerde golfhoogten + NAN = QA[J] / (Dict_inv['BKAS'] * CK) + NBN = -QB[J] / (Dict_inv['BKAS'] * CK) + + # gecorrigeerde gegenereerde golfhoogten + NA = (1.8 * NAO + 0.2 * NAN) / 2 + NB = (1.8 * NBO + 0.2 * NBN) / 2 + + # test voldoende nauwkeurige gegenereerde golfhoogten + if P > 1000 or abs(NAO - NA) < 0.001 and abs(NBO - NB) < 0.001: + break + + # waterstanden deurkas + HV = Dict_inv['HKI'] + NV #waterstand in de kolk + HA = HKAS + NA + NAT #waterstand bij spleet A + + if J >= 9 * NK: + H1 = HKAS + (QA[J - NK] - QB[J - 9 * NK]) / (Dict_inv['BKAS'] * CK) + H9 = HKAS + (QA[J - 9 * NK] - QB[J - NK]) / (Dict_inv['BKAS'] * CK) + elif J >= NK: + H1 = HKAS + QA[J - NK] / (Dict_inv['BKAS'] * CK) + H9 = HKAS - QB[J - NK] / (Dict_inv['BKAS'] * CK) + else: + H1 = HKAS + H9 = HKAS + + if J >= 8 * NK: + H2 = HKAS + (QA[J - 2 * NK] - QB[J - 8 * NK]) / (Dict_inv['BKAS'] * CK) + H8 = HKAS + (QA[J - 8 * NK] - QB[J - 2 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 2 * NK: + H2 = HKAS + QA[J - 2 * NK] / (Dict_inv['BKAS'] * CK) + H8 = HKAS - QB[J - 2 * NK] / (Dict_inv['BKAS'] * CK) + else: + H2 = HKAS + H8 = HKAS + + if J >= 7 * NK: + H3 = HKAS + (QA[J - 3 * NK] - QB[J - 7 * NK]) / (Dict_inv['BKAS'] * CK) + H7 = HKAS + (QA[J - 7 * NK] - QB[J - 3 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 3 * NK: + H3 = HKAS + QA[J - 3 * NK] / (Dict_inv['BKAS'] * CK) + H7 = HKAS - QB[J - 3 * NK] / (Dict_inv['BKAS'] * CK) + else: + H3 = HKAS + H7 = HKAS + + if J >= 6 * NK: + H4 = HKAS + (QA[J - 4 * NK] - QB[J - 6 * NK]) / (Dict_inv['BKAS'] * CK) + H6 = HKAS + (QA[J - 6 * NK] - QB[J - 4 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 4 * NK: + H4 = HKAS + QA[J - 4 * NK] / (Dict_inv['BKAS'] * CK) + H6 = HKAS - QB[J - 4 * NK] / (Dict_inv['BKAS'] * CK) + else: + H4 = HKAS + H6 = HKAS + + if J >= 5*NK: + H5 = HKAS + (QA[J - 5 * NK] - QB[J - 5 * NK]) / (Dict_inv['BKAS'] * CK) + else: + H5 = HKAS + # gemiddelde waterniveau in deurkas + HB = HKAS + NB + NBT + HW = Dict_inv['HKI'] + NW + + HGEM = (0.5*HA+H1 + H2 + H3 + H4 + H5 + H6 + H7 + H8 + H9+0.5*HB) / 10 + GGEM = (0.5*NV+H1 + H2 + H3 + H4 + H5 + H6 + H7 + H8 + H9+0.5*NW) / 10 + + QAA = QA[N] + QAT + QBB = QB[N] + QBT + + #Waterstand deurkas zijde + HKAS = HKAS - Dict_inv['MU'] * Dict_inv['AO'] * math.copysign(1, (HGEM - GGEM)) * \ + math.sqrt(2 * G * abs(HGEM - GGEM)) / Dict_inv['BKAS'] / Dict_inv['LKAS'] * Dict_inv['DT'] + # Outputs are calculated and saved here + + #Toeschrijven uitvoer + HKAS_list.append(HKAS) + T_list.append(T) + HV_list.append(HV) + HA_list.append(HV) + H5_list.append(H5) + HB_list.append(HB) + HW_list.append(HW) + HGEM_list.append(HGEM) + GGEM_list.append(GGEM) + NV_list.append(NV) + # Calculation up to end time + if T >= Dict_inv['TEND']: + break + +#Uitvoer +# T = tijd [s] +# HV = waterstand kolkzijde voor spleet A [mNAP] +# HA = waterstand kaszijde voor spleet A [mNAP] +# H5 = waterstand kaszijde midden kas [mNAP] +# HB = waterstand kaszijde voor spleet B [mNAP] +# HW = waterstand kolkzijde voor spleet B [mNAP] +# HGEM = gemiddelde waterstand in kas ter plaatse van de deur [mNAP] +# GGEM = gemiddelde waterstand in kolk ter plaatse van de deur [mNAP] +# GGEM - HGEM = gemiddeld verval over de deur [m] + + +# =====EINDE======================================================= \ No newline at end of file diff --git a/src/lockgate/Schip/KASGOLF_v2.py b/src/lockgate/Schip/KASGOLF_v2.py new file mode 100644 index 0000000..80b6441 --- /dev/null +++ b/src/lockgate/Schip/KASGOLF_v2.py @@ -0,0 +1,443 @@ +# PROGRAM KASGOLF + +# Doordringen van golf van langsvarend schip in de deurkas +# Versie 1.00 +# Waterloopkundig Laboratorium Delft +# A. Vrijburcht, 7 september 1993 + +# =====DECLARATIES======================================== + +import numpy as np +import pandas as pd +import os +from INTER import inter +import math +import matplotlib.pyplot as plt + +Inv_naam = 'Test_invoer.IN' + +T1 = np.zeros(21) #Tijdstabel [s] +N1 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet A [m] +T2 = np.zeros(21) #Tijdtabel 2 (?) [s] +N2 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet ? [m] + +NV=NW=0 + +QA = np.zeros(1001) #? +QB = np.zeros(1001) #? +G = 9.81 #Gravitatieversnelling [m/s^2] + +# =====INVOER===================================================== + +#HKI = #initiele waterstand [mNAP] +#ZK = #niveau kolk- en deurkasbodem [mNAP] +#LKK = #engte deurkas kolkzijde [m] +#LKAS = #lengte deurkas kaszijde [m] +#BKAS = #breedte deurkas kaszijde [m] +#BA = #breedte verticale spleet A [m] +#BB = #breedte verticale spleet B [m] +#AO = # Oppervlakte deuropening incl. onderzijde deur [m^2] +#MU = #afvoercoeff. verticale spleten A en B [-] +#DT = #tijdstap [s] +#TINIT = #start tijd [s] +#TEND = #eind tijd [s] +#M0 = #keuze golf met translatiesnelheid (=0) of vaarsnelheid (=1) +#VS = #vaarsnelheid [m/s] +#NT1 = #aantal op te geven punten tabel (integer!) + +#Uitlezen invoer bestand +Dict_inv = {} + +with open(os.path.join(os.getcwd(),Inv_naam), 'r') as file: + for line in file: + if '=' in line: + key, value = line.split('=') + key = key.strip() + value = value.strip() + if ',' in value: + value = list(map(float, value.split(','))) + else: + try: + value = float(value) + except ValueError: + value = int(value) + Dict_inv[key] = value + +Dict_inv['NT1'] = int(Dict_inv['NT1']) + +# Lengte array voor golven +J = 0 +K = 0 +T = Dict_inv['TINIT'] +HKAS = Dict_inv['HKI'] +QAT = 0 #Debiet in punt A +QBT = 0 #Debiet in punt B +NA = 0 #Gegenereerde golfhoogte punt A +NB = 0 #Gegenereerde golfhoogte punt B +NAT = 0 #Golfhoogte in punt A +NBT = 0 #Golfhoogte in punt B +Tot_A = Dict_inv['AO']#+(Dict_inv['BA']+Dict_inv['BB'])*(Dict_inv['HKI']-Dict_inv['ZK']) + + +# Length of array for waves +CK = np.sqrt(G * (Dict_inv['HKI'] - Dict_inv['ZK'])) #snelheid golf +if Dict_inv['M0'] == 0: + DTG = Dict_inv['LKK'] / CK #looptijd golf in kas bij golfsnelheid (M0 == 0) +else: + DTG = Dict_inv['LKK'] / Dict_inv['VS'] #looptijd golf in kas bij vaarsnelheid (M0 == 1) + +NKASR = Dict_inv['LKAS'] / CK / Dict_inv['DT'] #Aantal tijdstappen voor golf langs gehele kas +NKAS = int(round(NKASR)) +NK = int(round(NKAS / 10)) +N = int(1.1 * NKAS) + +# =====BEREKENING TRANSLATIEGOLVEN IN DEURKAS===================== +L_T = [] +L_HKAS = [] +L_HV = [] +L_HA = [] +L_H5 = [] +L_HB = [] +L_HW = [] +L_HGEM = [] +L_GGEM = [] +L_NV = [] +L_dH = [] +L_H1 = [] +L_H2 = [] +L_H3 = [] +L_H4 = [] +L_H6 = [] +L_H7 = [] +L_H8 = [] +L_H9 = [] +L_NBT = [] +L_NAT = [] + +''' +#Loop in de tijd voordat de golf bij de kas is +while inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) == HKAS and inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) == HKAS: + L_T.append(T) + L_HKAS.append(HKAS) + L_HV.append(HKAS) + L_HA.append(HKAS) + L_H5.append(HKAS) + L_HB.append(HKAS) + L_HW.append(HKAS) + L_HGEM.append(HKAS) + L_GGEM.append(HKAS) + L_NV.append(NV) + L_dH.append(0) + + J += 1 + T = round(T+Dict_inv['DT'],2) + +Jst_golf = J +''' +#Deze while loop stopt als Teind is bereikt en begint pas als T de tijdstap van begin golf heeft bereikt +while True: + + #Berekenen waterstanden Spleet 1 (NV) en spleet 2 (NW) + NV = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) + NW = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) + + #Lengte van de golf array (vanaf het moment dat de golf langstrekt) + if J <= (N): + P = 0 + + #Inkomend debiet via het kaskanaal + if J >= (NKAS): + QAT = QB[J-NKAS] + QBT = QA[J-NKAS] + + NAT = -QAT / (Dict_inv['BKAS']*CK) #Inkomende golfhoogte locatie A + NBT = QBT / (Dict_inv['BKAS']*CK) #Inkomende golfhoogte locatie B + + #Itereren tot juist benadering golfhoogte + while True: + P = P+1 + NAO = NA + NBO = NB + QA[J] = (Dict_inv['MU'] * Dict_inv['BA'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, NV - NA - NAT) * np.sqrt(2 * G * abs(NV - NA - NAT)) - QAT) + QB[J] = (Dict_inv['MU'] * Dict_inv['BB'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, (NB + NBT - NW)) * np.sqrt(2 * G * abs(NB + NBT - NW)) - QBT) + NAN = QA[J] / (Dict_inv['BKAS']*CK) + NBN = -QB[J] / (Dict_inv['BKAS']*CK) + NA = (1.8 * NAO + 0.2 * NAN) / 2 + NB = (1.8 * NBO + 0.2 * NBN) / 2 + + if P >= 1000 or (abs(NAO-NA) <= 0.001 and abs(NBO-NB) <= 0.001): + break + + HV = Dict_inv['HKI'] + NV #waterstand in de kolk + HA = HKAS + NA + NAT #waterstand bij spleet A. Waterstand KAS + + if J >= 9 * NK: + H1 = HKAS + (QA[J - NK - 1] - QB[J - 9 * NK - 1]) / (Dict_inv['BKAS'] * CK) + H9 = HKAS + (QA[J - 9 * NK - 1] - QB[J - NK - 1]) / (Dict_inv['BKAS'] * CK) + elif J >= NK: + H1 = HKAS + QA[J - NK - 1] / (Dict_inv['BKAS'] * CK) + H9 = HKAS - QB[J - NK - 1] / (Dict_inv['BKAS'] * CK) + else: + H1 = HKAS + H9 = HKAS + + if J >= 8 * NK: + H2 = HKAS + (QA[J - 2 * NK - 1] - QB[J - 8 * NK - 1]) / (Dict_inv['BKAS'] * CK) + H8 = HKAS + (QA[J - 8 * NK - 1] - QB[J - 2 * NK - 1]) / (Dict_inv['BKAS'] * CK) + elif J >= 2 * NK: + H2 = HKAS + QA[J - 2 * NK - 1] / (Dict_inv['BKAS'] * CK) + H8 = HKAS - QB[J - 2 * NK - 1] / (Dict_inv['BKAS'] * CK) + else: + H2 = HKAS + H8 = HKAS + + if J >= 7 * NK: + H3 = HKAS + (QA[J - 3 * NK - 1] - QB[J - 7 * NK - 1]) / (Dict_inv['BKAS'] * CK) + H7 = HKAS + (QA[J - 7 * NK - 1] - QB[J - 3 * NK - 1]) / (Dict_inv['BKAS'] * CK) + elif J >= 3 * NK: + H3 = HKAS + QA[J - 3 * NK - 1] / (Dict_inv['BKAS'] * CK) + H7 = HKAS - QB[J - 3 * NK - 1] / (Dict_inv['BKAS'] * CK) + else: + H3 = HKAS + H7 = HKAS + + if J >= 6 * NK: + H4 = HKAS + (QA[J - 4 * NK - 1] - QB[J - 6 * NK - 1]) / (Dict_inv['BKAS'] * CK) + H6 = HKAS + (QA[J - 6 * NK - 1] - QB[J - 4 * NK - 1]) / (Dict_inv['BKAS'] * CK) + elif J >= 4 * NK: + H4 = HKAS + QA[J - 4 * NK - 1] / (Dict_inv['BKAS'] * CK) + H6 = HKAS - QB[J - 4 * NK - 1] / (Dict_inv['BKAS'] * CK) + else: + H4 = HKAS + H6 = HKAS + + if J >= 5*NK: + H5 = HKAS + (QA[J - 5 * NK - 1] - QB[J - 5 * NK - 1]) / (Dict_inv['BKAS'] * CK) + else: + H5 = HKAS + + HB = HKAS + NB + NBT + HW = Dict_inv['HKI'] + NW + + HGEM = (0.5*HA+H1 + H2 + H3 + H4 + H5 + H6 + H7 + H8 + H9+0.5*HB) / 10 + GGEM = (0.5*NV+H1 + H2 + H3 + H4 + H5 + H6 + H7 + H8 + H9+0.5*NW) / 10 + + QAA = QA[J] + QAT + QBB = QB[J] + QBT + + + #De lengte array van de golf is al voorbij + else: + + + print('T=',T,QBT, 'NBT=',NBT, 'NB=',NB, QB[len(QB)-1]) + if T == 12.92: + break + QAT = QB[N-NKAS] #N-NKAS is 1 hele golflengte geleden (door ck komt debiet van B ten tijde van (N-NKAS) nu aan bij A) + QBT = QA[N-NKAS] + #Inkomende golfhoogte door translatiegolf + NAT = -QAT / (Dict_inv['BKAS']*CK) + NBT = QBT / (Dict_inv['BKAS']*CK) + + #if QBT > 0: + # break + + for L in range(0,N): + #Alles debieten schuiven een stapje verder, op locatie N komt het nieuwe debiet + QA[L] = QA[L+1] + QB[L] = QB[L+1] + + P = 0 + #Itereren tot juist benadering golfhoogte + while True: + P = P+1 + NAO = NA + NBO = NB + + # + QA[N] = (Dict_inv['MU'] * Dict_inv['BA'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, NV - NA - NAT) * np.sqrt(2 * G * abs(NV - NA - NAT)) - QAT) + QB[N] = (-Dict_inv['MU'] * Dict_inv['BB'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, (NW-NB-NBT)) * np.sqrt(2 * G * abs(NW-NB-NBT)) - QBT) + NAN = QA[N] / (Dict_inv['BKAS']*CK) + NBN = -QB[N] / (Dict_inv['BKAS']*CK) + NA = (1.8 * NAO + 0.2 * NAN) / 2 + NB = (1.8 * NBO + 0.2 * NBN) / 2 + + if P >= 1000 or (abs(NAO-NA) <= 0.001 and abs(NBO-NB) <= 0.001): + break + + HV = Dict_inv['HKI'] + NV #waterstand in de kolk + HA = HKAS + NA + NAT #waterstand bij spleet A + + if J >= 9 * NK: + H1 = HKAS + (QA[N - NK] - QB[N - 9 * NK]) / (Dict_inv['BKAS'] * CK) + H9 = HKAS + (QA[N - 9 * NK] - QB[N - NK]) / (Dict_inv['BKAS'] * CK) + elif J >= NK: + H1 = HKAS + QA[N - NK] / (Dict_inv['BKAS'] * CK) + H9 = HKAS - QB[N - NK] / (Dict_inv['BKAS'] * CK) + else: + H1 = HKAS + H9 = HKAS + + if J >= 8 * NK: + H2 = HKAS + (QA[N - 2 * NK] - QB[N - 8 * NK]) / (Dict_inv['BKAS'] * CK) + H8 = HKAS + (QA[N - 8 * NK] - QB[N - 2 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 2 * NK: + H2 = HKAS + QA[N - 2 * NK] / (Dict_inv['BKAS'] * CK) + H8 = HKAS - QB[N - 2 * NK] / (Dict_inv['BKAS'] * CK) + else: + H2 = HKAS + H8 = HKAS + + if J >= 7 * NK: + H3 = HKAS + (QA[N - 3 * NK ] - QB[N - 7 * NK]) / (Dict_inv['BKAS'] * CK) + H7 = HKAS + (QA[N - 7 * NK ] - QB[N - 3 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 3 * NK: + H3 = HKAS + QA[N - 3 * NK ] / (Dict_inv['BKAS'] * CK) + H7 = HKAS - QB[N - 3 * NK ] / (Dict_inv['BKAS'] * CK) + else: + H3 = HKAS + H7 = HKAS + + if J >= 6 * NK: + H4 = HKAS + (QA[N - 4 * NK] - QB[N - 6 * NK]) / (Dict_inv['BKAS'] * CK) + H6 = HKAS + (QA[N - 6 * NK ] - QB[N - 4 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 4 * NK: + H4 = HKAS + QA[N - 4 * NK] / (Dict_inv['BKAS'] * CK) + H6 = HKAS - QB[N - 4 * NK] / (Dict_inv['BKAS'] * CK) + else: + H4 = HKAS + H6 = HKAS + + if J >= 5*NK: + H5 = HKAS + (QA[N - 5 * NK] - QB[N - 5 * NK]) / (Dict_inv['BKAS'] * CK) + else: + H5 = HKAS + + HB = HKAS + NB + NBT + HW = Dict_inv['HKI'] + NW + + HGEM = HKAS+(0.5*HA+H1 + H2 + H3 + H4 + H5 + H6 + H7 + H8 + H9+0.5*HB) / 10 + + QAA = QA[N] + QAT + QBB = QB[N] + QBT + + # Constants + DTT = DTG / 10 + + # Calling the inter function for water levels at the lock side + G1 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 1 * DTT) + G2 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 2 * DTT) + G3 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 3 * DTT) + G4 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 4 * DTT) + G5 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 5 * DTT) + G6 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 6 * DTT) + G7 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 7 * DTT) + G8 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 8 * DTT) + G9 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 9 * DTT) + + # Calculating the average water level in kolk + GGEM = Dict_inv['HKI'] + (0.5 * NV + G1 + G2 + G3 + G4 + G5 + G6 + G7 + G8 + G9 + 0.5 * NW) / 10 + + # Water level at the kas side of the door + HKAS = HKAS - (Dict_inv['MU'] * Tot_A * np.sign(HGEM - GGEM) * + np.sqrt(2 * G * abs(HGEM - GGEM)) / (Dict_inv['BKAS'] * Dict_inv['LKAS'])) * Dict_inv['DT'] + + dH = GGEM-HGEM + + #Toeschrijven uitvoer + L_NAT.append(NAT) + L_NBT.append(NBT) + L_T.append(T) + L_HKAS.append(HKAS) + L_HV.append(HV) + L_HA.append(HA) + L_H5.append(H5) + L_HB.append(HB) + L_HW.append(HW) + L_HGEM.append(HGEM) + L_GGEM.append(GGEM) + L_NV.append(NV) + L_dH.append(dH) + L_H1.append(H1) + L_H2.append(H2) + L_H3.append(H3) + L_H4.append(H4) + L_H6.append(H6) + L_H7.append(H7) + L_H8.append(H8) + L_H9.append(H9) + + + # Calculation up to end time + if T >= Dict_inv['TEND']: + break + + J += 1 + T = round(T+Dict_inv['DT'],2) + +print(T) +print('NAT',NAT,'NBT',NBT,'NV',NV,'NW',NW,'NA',NA,'NB',NB) +plt.plot(L_T,L_HA,label='HA kas') +plt.plot(L_T,L_HB,label='HB kas') +plt.plot(L_T,L_HV,label='Spleet A kolk') +plt.plot(L_T,L_HW,label='Spleet B kolk') +plt.plot(L_T,L_H5,label='H5') +plt.legend() +#plt.xlim([-1,6]) +plt.figure() +plt.plot(L_T,L_HGEM,label='HGEM') +plt.plot(L_T,L_GGEM,label='GGEM') +plt.plot(L_T,L_HKAS,label='HKAS') +plt.plot(L_T,L_dH,label='Verval') +plt.plot(L_T,L_HW,label='WL Kolk spleet B') +plt.plot(L_T,L_HV,label='WL Kolk spleet A') +plt.legend() +#plt.xlim([-1,6]) + +plt.figure() +plt.plot(L_T,L_HV,label='Wl kolk tpv A') +plt.plot(L_T,L_H5,label='H midden deurkas') +plt.plot(L_T,L_HW,label='Wl kolk tpv B') +plt.ylim([-0.4,1.2]) +plt.grid() +plt.xticks([-6,0,6,12,18,24,30]) + +plt.figure() +plt.plot(L_T,L_dH) +plt.ylim([-0.8,0.8]) +plt.grid() +plt.xticks([-6,0,6,12,18,24,30]) + +#%% Read fortran uitvoer +column_names = ['T','HV','HA','H5','HB','HW','HGEM','GGEM','GGEM-HGEM'] +dt_1 = pd.read_csv('Fort_uitv_1dt.out',names=column_names,index_col=False) +dt_10 = pd.read_csv('Fort_uitv_10dt.out',names=column_names,index_col=False) + +plt.plot(dt_1["T"],dt_1["GGEM-HGEM"],label='Verval .FOR 1 dt') +plt.plot(dt_10["T"],dt_10["GGEM-HGEM"],label='Verval .FOR 10 dt') +plt.plot(L_T,L_dH,label='Verval .py') +plt.legend() +plt.ylim([-0.1,0.1]) +plt.xlim([-1,2]) + +#Uitvoer +# T = tijd [s] +# HV = waterstand kolkzijde voor spleet A [mNAP] +# HA = waterstand kaszijde voor spleet A [mNAP] +# H5 = waterstand kaszijde midden kas [mNAP] +# HB = waterstand kaszijde voor spleet B [mNAP] +# HW = waterstand kolkzijde voor spleet B [mNAP] +# HGEM = gemiddelde waterstand in kas ter plaatse van de deur [mNAP] +# GGEM = gemiddelde waterstand in kolk ter plaatse van de deur [mNAP] +# GGEM - HGEM = gemiddeld verval over de deur [m] + + +# =====EINDE======================================================= + + +#OPmerking 27-09-24 +#Het lijkt mij vreemd dat spleet B meegroeit met H5. Met name het moment dat de golf spleet B bereiekt is gek. Er lijkt iets fout in NB in de eerste loop (ook de tweede) \ No newline at end of file diff --git a/src/lockgate/Schip/KASGOLF_v3.py b/src/lockgate/Schip/KASGOLF_v3.py new file mode 100644 index 0000000..c67f94d --- /dev/null +++ b/src/lockgate/Schip/KASGOLF_v3.py @@ -0,0 +1,443 @@ +# PROGRAM KASGOLF + +# Doordringen van golf van langsvarend schip in de deurkas +# Versie 1.00 +# Waterloopkundig Laboratorium Delft +# A. Vrijburcht, 7 september 1993 + +# =====DECLARATIES======================================== + +import numpy as np +import os +from INTER import inter +import math +import matplotlib.pyplot as plt +import pandas as pd + +Inv_naam = 'Inv_Sam_nz.IN' + +T1 = np.zeros(21) #Tijdstabel [s] +N1 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet A [m] +T2 = np.zeros(21) #Tijdtabel 2 (?) [s] +N2 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet ? [m] + +NV=NW=0 + +QA = []#np.zeros(1001) #? +QB = []#np.zeros(1001) #? +G = 9.81 #Gravitatieversnelling [m/s^2] + +# =====INVOER===================================================== + +#HKI = #initiele waterstand [mNAP] +#ZK = #niveau kolk- en deurkasbodem [mNAP] +#LKK = #engte deurkas kolkzijde [m] +#LKAS = #lengte deurkas kaszijde [m] +#BKAS = #breedte deurkas kaszijde [m] +#BA = #breedte verticale spleet A [m] +#BB = #breedte verticale spleet B [m] +#AO = # Oppervlakte deuropening incl. onderzijde deur [m^2] +#MU = #afvoercoeff. verticale spleten A en B [-] +#DT = #tijdstap [s] +#TINIT = #start tijd [s] +#TEND = #eind tijd [s] +#M0 = #keuze golf met translatiesnelheid (=0) of vaarsnelheid (=1) +#VS = #vaarsnelheid [m/s] +#NT1 = #aantal op te geven punten tabel (integer!) + +#Uitlezen invoer bestand +Dict_inv = {} + +with open(os.path.join(os.getcwd(),Inv_naam), 'r') as file: + for line in file: + if '=' in line: + key, value = line.split('=') + key = key.strip() + value = value.strip() + if ',' in value: + value = list(map(float, value.split(','))) + else: + try: + value = float(value) + except ValueError: + value = int(value) + Dict_inv[key] = value + +Dict_inv['NT1'] = int(Dict_inv['NT1']) + +# Lengte array voor golven +J = 0 +K = 0 +T = Dict_inv['TINIT'] +HKAS = Dict_inv['HKI'] +QAT = 0 #Debiet in punt A +QBT = 0 #Debiet in punt B +NA = 0 #Gegenereerde golfhoogte punt A +NB = 0 #Gegenereerde golfhoogte punt B +NAT = 0 #Golfhoogte in punt A +NBT = 0 #Golfhoogte in punt B +Tot_A = Dict_inv['AO']#+(Dict_inv['BA']+Dict_inv['BB'])*(Dict_inv['HKI']-Dict_inv['ZK']) + + +# Length of array for waves +CK = np.sqrt(G * (Dict_inv['HKI'] - Dict_inv['ZK'])) #snelheid golf +if Dict_inv['M0'] == 0: + DTG = Dict_inv['LKK'] / CK #looptijd golf in kas bij golfsnelheid (M0 == 0) +else: + DTG = Dict_inv['LKK'] / Dict_inv['VS'] #looptijd golf in kas bij vaarsnelheid (M0 == 1) + +NKASR = Dict_inv['LKAS'] / CK / Dict_inv['DT'] #Aantal tijdstappen voor golf langs gehele kas +NKAS = int(round(NKASR)) +NK = int(round(NKAS / 10)) +N = int(1.1 * NKAS) + +# =====BEREKENING TRANSLATIEGOLVEN IN DEURKAS===================== +L_T = [] +L_HKAS = [] +L_HV = [] +L_HA = [] +L_H5 = [] +L_HB = [] +L_HW = [] +L_HGEM = [] +L_GGEM = [] +L_NV = [] +L_dH = [] +L_H1 = [] +L_H2 = [] +L_H3 = [] +L_H4 = [] +L_H6 = [] +L_H7 = [] +L_H8 = [] +L_H9 = [] +L_NBT = [] +L_NAT = [] + +''' +#Loop in de tijd voordat de golf bij de kas is +while inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) == HKAS and inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) == HKAS: + L_T.append(T) + L_HKAS.append(HKAS) + L_HV.append(HKAS) + L_HA.append(HKAS) + L_H5.append(HKAS) + L_HB.append(HKAS) + L_HW.append(HKAS) + L_HGEM.append(HKAS) + L_GGEM.append(HKAS) + L_NV.append(NV) + L_dH.append(0) + + J += 1 + T = round(T+Dict_inv['DT'],2) + +Jst_golf = J +''' +#Deze while loop stopt als Teind is bereikt en begint pas als T de tijdstap van begin golf heeft bereikt +while True: + + #Berekenen waterstanden Spleet 1 (NV) en spleet 2 (NW) + NV = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) + NW = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) + + #Lengte van de golf array (vanaf het moment dat de golf langstrekt) + if J <= (N): + P = 0 + + #Inkomend debiet via het kaskanaal + if J >= (NKAS): + QAT = QB[J-NKAS] + QBT = QA[J-NKAS] + + NAT = -QAT / (Dict_inv['BKAS']*CK) #Inkomende golfhoogte locatie A + NBT = QBT / (Dict_inv['BKAS']*CK) #Inkomende golfhoogte locatie B + + #Itereren tot juist benadering golfhoogte + while True: + P = P+1 + NAO = NA + NBO = NB + QA_dum = (Dict_inv['MU'] * Dict_inv['BA'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, NV - NA - NAT) * np.sqrt(2 * G * abs(NV - NA - NAT)) - QAT) + QB_dum = (-Dict_inv['MU'] * Dict_inv['BB'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, (NW-NB-NBT)) * np.sqrt(2 * G * abs(NW-NB-NBT)) - QBT) + NAN = QA_dum / (Dict_inv['BKAS']*CK) + NBN = -QB_dum / (Dict_inv['BKAS']*CK) + NA = (1.8 * NAO + 0.2 * NAN) / 2 + NB = (1.8 * NBO + 0.2 * NBN) / 2 + + if P >= 1000 or (abs(NAO-NA) <= 0.001 and abs(NBO-NB) <= 0.001): + break + QA.append(QA_dum) + QB.append(QB_dum) + + HV = Dict_inv['HKI'] + NV #waterstand in de kolk + HA = HKAS + NA + NAT #waterstand bij spleet A. Waterstand KAS + + if J >= 9 * NK: + H1 = HKAS + (QA[J - NK - 1] - QB[J - 9 * NK - 1]) / (Dict_inv['BKAS'] * CK) + H9 = HKAS + (QA[J - 9 * NK - 1] - QB[J - NK - 1]) / (Dict_inv['BKAS'] * CK) + elif J >= NK: + H1 = HKAS + QA[J - NK - 1] / (Dict_inv['BKAS'] * CK) + H9 = HKAS - QB[J - NK - 1] / (Dict_inv['BKAS'] * CK) + else: + H1 = HKAS + H9 = HKAS + + if J >= 8 * NK: + H2 = HKAS + (QA[J - 2 * NK - 1] - QB[J - 8 * NK - 1]) / (Dict_inv['BKAS'] * CK) + H8 = HKAS + (QA[J - 8 * NK - 1] - QB[J - 2 * NK - 1]) / (Dict_inv['BKAS'] * CK) + elif J >= 2 * NK: + H2 = HKAS + QA[J - 2 * NK - 1] / (Dict_inv['BKAS'] * CK) + H8 = HKAS - QB[J - 2 * NK - 1] / (Dict_inv['BKAS'] * CK) + else: + H2 = HKAS + H8 = HKAS + + if J >= 7 * NK: + H3 = HKAS + (QA[J - 3 * NK - 1] - QB[J - 7 * NK - 1]) / (Dict_inv['BKAS'] * CK) + H7 = HKAS + (QA[J - 7 * NK - 1] - QB[J - 3 * NK - 1]) / (Dict_inv['BKAS'] * CK) + elif J >= 3 * NK: + H3 = HKAS + QA[J - 3 * NK - 1] / (Dict_inv['BKAS'] * CK) + H7 = HKAS - QB[J - 3 * NK - 1] / (Dict_inv['BKAS'] * CK) + else: + H3 = HKAS + H7 = HKAS + + if J >= 6 * NK: + H4 = HKAS + (QA[J - 4 * NK - 1] - QB[J - 6 * NK - 1]) / (Dict_inv['BKAS'] * CK) + H6 = HKAS + (QA[J - 6 * NK - 1] - QB[J - 4 * NK - 1]) / (Dict_inv['BKAS'] * CK) + elif J >= 4 * NK: + H4 = HKAS + QA[J - 4 * NK - 1] / (Dict_inv['BKAS'] * CK) + H6 = HKAS - QB[J - 4 * NK - 1] / (Dict_inv['BKAS'] * CK) + else: + H4 = HKAS + H6 = HKAS + + if J >= 5*NK: + H5 = HKAS + (QA[J - 5 * NK - 1] - QB[J - 5 * NK - 1]) / (Dict_inv['BKAS'] * CK) + else: + H5 = HKAS + + HB = HKAS + NB + NBT + HW = Dict_inv['HKI'] + NW + + HGEM = (0.5*HA+H1 + H2 + H3 + H4 + H5 + H6 + H7 + H8 + H9+0.5*HB) / 10 + GGEM = (0.5*NV+H1 + H2 + H3 + H4 + H5 + H6 + H7 + H8 + H9+0.5*NW) / 10 + + QAA = QA[J] + QAT + QBB = QB[J] + QBT + + + #De lengte array van de golf is al voorbij + else: + print('T=',T,QBT, 'NBT=',NBT, 'NB=',NB, QB[len(QB)-1],QB_dum) + #if T == 12.90: + # break + + QAT = QB[len(QB)-1-NKAS] #N-NKAS is 1 hele golflengte geleden (door ck komt debiet van B ten tijde van (N-NKAS) nu aan bij A) + QBT = QA[len(QA)-1-NKAS] + #Inkomende golfhoogte door translatiegolf + NAT = -QAT / (Dict_inv['BKAS']*CK) + NBT = QBT / (Dict_inv['BKAS']*CK) + + P = 0 + #Itereren tot juist benadering golfhoogte + while True: + P = P+1 + + NAO = NA + NBO = NB + + QA_dum = (Dict_inv['MU'] * Dict_inv['BA'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * math.copysign(1, NV - NA - NAT) * np.sqrt(2 * G * abs(NV - NA - NAT)) - QAT) + QB_dum = (-Dict_inv['MU'] * Dict_inv['BB'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * math.copysign(1, (NW-NB-NBT)) * np.sqrt(2 * G * abs(NW-NB-NBT)) - QBT) + + NAN = QA_dum / (Dict_inv['BKAS']*CK) + NBN = -QB_dum / (Dict_inv['BKAS']*CK) + NA = (0.89 * NAO + 0.11 * NAN) + NB = (0.89 * NBO + 0.11 * NBN) + + if P >= 5000 or (abs(NAO-NA) <= 0.001 and abs(NBO-NB) <= 0.001): + #alpha = 0.1 + #NA = (1 - alpha) * NAO + alpha * ((1.8 * NAO + 0.20 * NAN) / 2) + #NB =(1 -alpha) * NBO + alpha * ((1.8 * NBO + 0.20 * NBN) / 2) + break + + QA.append(QA_dum) + QB.append(QB_dum) + + HV = Dict_inv['HKI'] + NV #waterstand in de kolk + HA = HKAS + NA + NAT #waterstand bij spleet A + + if J >= 9 * NK: + H1 = HKAS + (QA[len(QA)-1 - NK] - QB[len(QB)-1 - 9 * NK]) / (Dict_inv['BKAS'] * CK) + H9 = HKAS + (QA[len(QA)-1 - 9 * NK] - QB[len(QB)-1 - NK]) / (Dict_inv['BKAS'] * CK) + elif J >= NK: + H1 = HKAS + QA[len(QA)-1 - NK] / (Dict_inv['BKAS'] * CK) + H9 = HKAS - QB[len(QB)-1 - NK] / (Dict_inv['BKAS'] * CK) + else: + H1 = HKAS + H9 = HKAS + + if J >= 8 * NK: + H2 = HKAS + (QA[len(QA)-1 - 2 * NK] - QB[len(QB)-1 - 8 * NK]) / (Dict_inv['BKAS'] * CK) + H8 = HKAS + (QA[len(QA)-1 - 8 * NK] - QB[len(QB)-1 - 2 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 2 * NK: + H2 = HKAS + QA[len(QA)-1 - 2 * NK] / (Dict_inv['BKAS'] * CK) + H8 = HKAS - QB[len(QB)-1 - 2 * NK] / (Dict_inv['BKAS'] * CK) + else: + H2 = HKAS + H8 = HKAS + + if J >= 7 * NK: + H3 = HKAS + (QA[len(QA)-1 - 3 * NK ] - QB[len(QB)-1 - 7 * NK]) / (Dict_inv['BKAS'] * CK) + H7 = HKAS + (QA[len(QA) - 7 * NK ] - QB[len(QB)-1 - 3 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 3 * NK: + H3 = HKAS + QA[len(QA)-1 - 3 * NK ] / (Dict_inv['BKAS'] * CK) + H7 = HKAS - QB[len(QB)-1 - 3 * NK ] / (Dict_inv['BKAS'] * CK) + else: + H3 = HKAS + H7 = HKAS + + if J >= 6 * NK: + H4 = HKAS + (QA[len(QA)-1 - 4 * NK] - QB[len(QB)-1 - 6 * NK]) / (Dict_inv['BKAS'] * CK) + H6 = HKAS + (QA[len(QA)-1 - 6 * NK ] - QB[len(QB)-1 - 4 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 4 * NK: + H4 = HKAS + QA[len(QA)-1 - 4 * NK] / (Dict_inv['BKAS'] * CK) + H6 = HKAS - QB[len(QB)-1 - 4 * NK] / (Dict_inv['BKAS'] * CK) + else: + H4 = HKAS + H6 = HKAS + + if J >= 5*NK: + H5 = HKAS + (QA[len(QA)-1 - 5 * NK] - QB[len(QB)-1 - 5 * NK]) / (Dict_inv['BKAS'] * CK) + else: + H5 = HKAS + + HB = HKAS + NB + NBT + HW = Dict_inv['HKI'] + NW + + HGEM = HKAS+(0.5*HA+H1 + H2 + H3 + H4 + H5 + H6 + H7 + H8 + H9+0.5*HB) / 10 + + #Deze snap ik nog niet + QAA = QA[len(QA)-1] + QAT + QBB = QB[len(QB)-1] + QBT + + # Constants + DTT = DTG / 10 + + # Calling the inter function for water levels at the lock side + G1 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 1 * DTT) + G2 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 2 * DTT) + G3 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 3 * DTT) + G4 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 4 * DTT) + G5 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 5 * DTT) + G6 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 6 * DTT) + G7 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 7 * DTT) + G8 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 8 * DTT) + G9 = inter(Dict_inv['NT1'], Dict_inv['T1'], Dict_inv['N1'], T - 9 * DTT) + + # Calculating the average water level in kolk + GGEM = Dict_inv['HKI'] + (0.5 * NV + G1 + G2 + G3 + G4 + G5 + G6 + G7 + G8 + G9 + 0.5 * NW) / 10 + + # Water level at the kas side of the door + HKAS = HKAS - (Dict_inv['MU'] * Tot_A * np.sign(HGEM - GGEM) * + np.sqrt(2 * G * abs(HGEM - GGEM)) / (Dict_inv['BKAS'] * Dict_inv['LKAS'])) * Dict_inv['DT'] + + dH = GGEM-HGEM + + #Toeschrijven uitvoer + L_NAT.append(NAT) + L_NBT.append(NBT) + L_T.append(T) + L_HKAS.append(HKAS) + L_HV.append(HV) + L_HA.append(HA) + L_H5.append(H5) + L_HB.append(HB) + L_HW.append(HW) + L_HGEM.append(HGEM) + L_GGEM.append(GGEM) + L_NV.append(NV) + L_dH.append(dH) + L_H1.append(H1) + L_H2.append(H2) + L_H3.append(H3) + L_H4.append(H4) + L_H6.append(H6) + L_H7.append(H7) + L_H8.append(H8) + L_H9.append(H9) + + + # Calculation up to end time + if T >= Dict_inv['TEND']: + break + + J += 1 + T = round(T+Dict_inv['DT'],2) + +#%% +print(T) +print('NAT',NAT,'NBT',NBT,'NV',NV,'NW',NW,'NA',NA,'NB',NB) +plt.plot(L_T,L_HA,label='HA kas') +plt.plot(L_T,L_HB,label='HB kas') +plt.plot(L_T,L_HV,label='Spleet A kolk') +plt.plot(L_T,L_HW,label='Spleet B kolk') +plt.plot(L_T,L_H5,label='H5') +plt.legend() +#plt.xlim([-1,6]) +plt.figure() +plt.plot(L_T,L_HGEM,label='HGEM') +plt.plot(L_T,L_GGEM,label='GGEM') +plt.plot(L_T,L_HKAS,label='HKAS') +plt.plot(L_T,L_dH,label='Verval') +plt.plot(L_T,L_HW,label='WL Kolk spleet B') +plt.plot(L_T,L_HV,label='WL Kolk spleet A') +plt.legend() +#plt.xlim([-1,6]) + +plt.figure() +plt.plot(L_T,L_HV,label='Wl kolk tpv A') +plt.plot(L_T,L_H5,label='H midden deurkas') +plt.plot(L_T,L_HW,label='Wl kolk tpv B') +plt.ylim([-0.4,1.2]) +plt.grid() +plt.xticks([-6,0,6,12,18,24,30]) + +plt.figure() +plt.plot(L_T,L_dH) +plt.ylim([-0.4,0.2]) +plt.grid() +plt.xticks([-6,0,6,12,18,24,30]) + +#%% Read fortran uitvoer +column_names = ['T','HV','HA','H5','HB','HW','HGEM','GGEM','GGEM-HGEM'] +dt_1 = pd.read_csv('Fort_uitv_1dt.out',names=column_names,index_col=False) +dt_10 = pd.read_csv('Fort_uitv_10dt.out',names=column_names,index_col=False) + +plt.plot(dt_1["T"],dt_1["GGEM-HGEM"],label='Verval .FOR 1 dt') +plt.plot(dt_10["T"],dt_10["GGEM-HGEM"],label='Verval .FOR 10 dt') +#plt.plot(L_T,L_dH,label='Verval .py') +plt.legend() +plt.ylim([-0.4,0.2]) +#plt.xlim([0,2]) +#Uitvoer +# T = tijd [s] +# HV = waterstand kolkzijde voor spleet A [mNAP] +# HA = waterstand kaszijde voor spleet A [mNAP] +# H5 = waterstand kaszijde midden kas [mNAP] +# HB = waterstand kaszijde voor spleet B [mNAP] +# HW = waterstand kolkzijde voor spleet B [mNAP] +# HGEM = gemiddelde waterstand in kas ter plaatse van de deur [mNAP] +# GGEM = gemiddelde waterstand in kolk ter plaatse van de deur [mNAP] +# GGEM - HGEM = gemiddeld verval over de deur [m] + + +# =====EINDE======================================================= + + +#OPmerking 27-09-24 +#Het lijkt mij vreemd dat spleet B meegroeit met H5. Met name het moment dat de golf spleet B bereiekt is gek. Er lijkt iets fout in NB in de eerste loop (ook de tweede) +# %% diff --git a/src/lockgate/Schip/KASGOLF_v4.py b/src/lockgate/Schip/KASGOLF_v4.py new file mode 100644 index 0000000..9c44fc0 --- /dev/null +++ b/src/lockgate/Schip/KASGOLF_v4.py @@ -0,0 +1,412 @@ +# PROGRAM KASGOLF + +# Doordringen van golf van langsvarend schip in de deurkas +# Versie 1.00 +# Waterloopkundig Laboratorium Delft +# A. Vrijburcht, 7 september 1993 + +# =====DECLARATIES======================================== + +import numpy as np +import os +import math +import matplotlib.pyplot as plt +import pandas as pd + +Inv_naam = 'Inv_Sam_nz_OG.IN' + +T1 = np.zeros(21) #Tijdstabel [s] +N1 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet A [m] +T2 = np.zeros(21) #Tijdtabel 2 (?) [s] +N2 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet ? [m] + +NV=NW=0 + +QA = []#np.zeros(1001) #? +QB = []#np.zeros(1001) #? +G = 9.81 #Gravitatieversnelling [m/s^2] + +# =====INVOER===================================================== + +#HKI = #initiele waterstand [mNAP] +#ZK = #niveau kolk- en deurkasbodem [mNAP] +#LKK = #engte deurkas kolkzijde [m] +#LKAS = #lengte deurkas kaszijde [m] +#BKAS = #breedte deurkas kaszijde [m] +#BA = #breedte verticale spleet A [m] +#BB = #breedte verticale spleet B [m] +#AO = # Oppervlakte deuropening incl. onderzijde deur [m^2] +#MU = #afvoercoeff. verticale spleten A en B [-] +#DT = #tijdstap [s] +#TINIT = #start tijd [s] +#TEND = #eind tijd [s] +#M0 = #keuze golf met translatiesnelheid (=0) of vaarsnelheid (=1) +#VS = #vaarsnelheid [m/s] +#NT1 = #aantal op te geven punten tabel (integer!) + +#Uitlezen invoer bestand +Dict_inv = {} + +with open(os.path.join(os.getcwd(),Inv_naam), 'r') as file: + for line in file: + if '=' in line: + key, value = line.split('=') + key = key.strip() + value = value.strip() + if ',' in value: + value = list(map(float, value.split(','))) + else: + try: + value = float(value) + except ValueError: + value = int(value) + Dict_inv[key] = value + +Dict_inv['NT1'] = int(Dict_inv['NT1']) + +# Lengte array voor golven +J = 0 +K = 0 +T = Dict_inv['TINIT'] +HKAS = Dict_inv['HKI'] +QAT = 0 #Debiet in punt A +QBT = 0 #Debiet in punt B +NA = 0 #Gegenereerde golfhoogte punt A +NB = 0 #Gegenereerde golfhoogte punt B +NAT = 0 #Golfhoogte in punt A +NBT = 0 #Golfhoogte in punt B +QA_dum = 0 #Iteratie debiet door spleet A +QB_dum = 0 #Iteratie debiet door spleet B +Tot_A = Dict_inv['AO']#Oppervlak spleet onder deur (spleet 3) + + +# Length of array for waves +CK = np.sqrt(G * (Dict_inv['HKI'] - Dict_inv['ZK'])) #snelheid golf +if Dict_inv['M0'] == 0: + DTG = Dict_inv['LKK'] / CK #looptijd golf in kas bij golfsnelheid (M0 == 0) +else: + DTG = Dict_inv['LKK'] / Dict_inv['VS'] #looptijd golf in kas bij vaarsnelheid (M0 == 1) + +NKASR = Dict_inv['LKAS'] / CK / Dict_inv['DT'] #Aantal tijdstappen voor golf langs gehele kas +NKAS = int(round(NKASR)) +NK = int(round(NKAS / 10)) +N = int(1.1 * NKAS) + +# =====BEREKENING TRANSLATIEGOLVEN IN DEURKAS===================== +L_T = [] +L_HKAS = [] +L_HV = [] +L_HA = [] +L_H5 = [] +L_HB = [] +L_HW = [] +L_HGEM = [] +L_GGEM = [] +L_NV = [] +L_dH = [] +L_H1 = [] +L_H2 = [] +L_H3 = [] +L_H4 = [] +L_H6 = [] +L_H7 = [] +L_H8 = [] +L_H9 = [] +L_NBT = [] +L_NAT = [] + +''' +#Loop in de tijd voordat de golf bij de kas is +while inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) == HKAS and inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) == HKAS: + L_T.append(T) + L_HKAS.append(HKAS) + L_HV.append(HKAS) + L_HA.append(HKAS) + L_H5.append(HKAS) + L_HB.append(HKAS) + L_HW.append(HKAS) + L_HGEM.append(HKAS) + L_GGEM.append(HKAS) + L_NV.append(NV) + L_dH.append(0) + + J += 1 + T = round(T+Dict_inv['DT'],2) + +Jst_golf = J +''' +#Deze while loop stopt als Teind is bereikt en begint pas als T de tijdstap van begin golf heeft bereikt +while True: + + #Berekenen waterstanden Spleet 1 (NV) en spleet 2 (NW) + #NV = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) + #NW = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) + NV = np.interp(T,Dict_inv['T1'],Dict_inv['N1']) + NW = np.interp(T-DTG,Dict_inv['T1'],Dict_inv['N1']) + + #Lengte van de golf array (vanaf het moment dat de golf langstrekt) + if J <= (N): + #Inkomend debiet via het kaskanaal + if J >= (NKAS): + QAT = QB[J-NKAS] + QBT = QA[J-NKAS] + + NAT = -QAT / (Dict_inv['BKAS']*CK) #Inkomende golfhoogte locatie A + NBT = QBT / (Dict_inv['BKAS']*CK) #Inkomende golfhoogte locatie B + + #De lengte array van de golf is al voorbij + else: + #print('T=',T,QBT, 'NBT=',NBT, 'NB=',NB, QB[len(QB)-1],QB_dum) + #if T == 12.90: + # break + QAT = QB[len(QB)-NKAS] #N-NKAS is 1 hele golflengte geleden (door ck komt debiet van B ten tijde van (N-NKAS) nu aan bij A) + QBT = QA[len(QA)-NKAS] + + #Inkomende golfhoogte door translatiegolf + NAT = -QAT / (Dict_inv['BKAS']*CK) + NBT = QBT / (Dict_inv['BKAS']*CK) + + + max_iterations = 10000 + tolerance = 0.001 + + NAO = 0 + NBO = 0 + + #if T == 6.44: + # break + #Itereren tot juist benadering golfhoogte + for P in range(0,max_iterations+1): + QAO = QA_dum + QBO = QB_dum + NAO = NA + NBO = NB + QB_update = (-Dict_inv['MU'] * Dict_inv['BB'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, NW - NB - NBT) * np.sqrt(2 * G * abs(NW - NB - NBT)) - QBT) + QA_update = (Dict_inv['MU'] * Dict_inv['BA'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, NV - NA - NAT) * np.sqrt(2 * G * abs(NV - NA - NAT)) - QAT) + + QA_dum = QA_update#0.1*QA_update + 0.9*QAO + QB_dum = QB_update#0.1*QB_update + 0.9*QBO + + NAN = QA_dum / (Dict_inv['BKAS']*CK) + NA = 0.9 * NAO + 0.1 * NAN + NBN = -QB_dum / (Dict_inv['BKAS']*CK) + NB = 0.9 * NBO + 0.1 * NBN + + #if abs(NB - NBO) <= tolerance and abs(QB_dum - QBO) <= tolerance and abs(NA - NAO) <= tolerance and abs(QA_dum - QAO) <= tolerance: + if (abs(NB - NBO) <= tolerance and abs(NA - NAO) <= tolerance): + #print('Doet het nu') + break + + else: + print(f'T:{T}; No value found') + + #if T == 4: + # break + + QA.append(QA_dum) + QB.append(QB_dum) + + HV = Dict_inv['HKI'] + NV #waterstand in de kolk + HA = HKAS + NA + NAT #waterstand bij spleet A. Waterstand KAS + + if J >= 9 * NK: + H1 = HKAS + (QA[J - NK] - QB[J - 9 * NK]) / (Dict_inv['BKAS'] * CK) + H9 = HKAS + (QA[J - 9 * NK] - QB[J - NK]) / (Dict_inv['BKAS'] * CK) + elif J >= NK: + H1 = HKAS + QA[J - NK] / (Dict_inv['BKAS'] * CK) + H9 = HKAS - QB[J - NK] / (Dict_inv['BKAS'] * CK) + else: + H1 = HKAS + H9 = HKAS + + if J >= 8 * NK: + H2 = HKAS + (QA[J - 2 * NK] - QB[J - 8 * NK]) / (Dict_inv['BKAS'] * CK) + H8 = HKAS + (QA[J - 8 * NK] - QB[J - 2 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 2 * NK: + H2 = HKAS + QA[J - 2 * NK] / (Dict_inv['BKAS'] * CK) + H8 = HKAS - QB[J - 2 * NK] / (Dict_inv['BKAS'] * CK) + else: + H2 = HKAS + H8 = HKAS + + if J >= 7 * NK: + H3 = HKAS + (QA[J - 3 * NK] - QB[J - 7 * NK]) / (Dict_inv['BKAS'] * CK) + H7 = HKAS + (QA[J - 7 * NK] - QB[J - 3 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 3 * NK: + H3 = HKAS + QA[J - 3 * NK] / (Dict_inv['BKAS'] * CK) + H7 = HKAS - QB[J - 3 * NK] / (Dict_inv['BKAS'] * CK) + else: + H3 = HKAS + H7 = HKAS + + if J >= 6 * NK: + H4 = HKAS + (QA[J - 4 * NK] - QB[J - 6 * NK]) / (Dict_inv['BKAS'] * CK) + H6 = HKAS + (QA[J - 6 * NK] - QB[J - 4 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 4 * NK: + H4 = HKAS + QA[J - 4 * NK] / (Dict_inv['BKAS'] * CK) + H6 = HKAS - QB[J - 4 * NK] / (Dict_inv['BKAS'] * CK) + else: + H4 = HKAS + H6 = HKAS + + if J >= 5*NK: + H5 = HKAS + (QA[J - 5 * NK] - QB[J - 5 * NK]) / (Dict_inv['BKAS'] * CK) + else: + H5 = HKAS + + HB = HKAS + NB + NBT + HW = Dict_inv['HKI'] + NW + + HGEM = (0.5*HA+H1 + H2 + H3 + H4 + H5 + H6 + H7 + H8 + H9+0.5*HB) / 10 + + QAA = QA[J] + QAT + QBB = QB[J] + QBT + + # Constants + DTT = DTG / 10 + + # Calling the inter function for water levels at the lock side + G1 = np.interp(T - 1 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G2 = np.interp(T - 2 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G3 = np.interp(T - 3 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G4 = np.interp(T - 4 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G5 = np.interp(T - 5 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G6 = np.interp(T - 6 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G7 = np.interp(T - 7 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G8 = np.interp(T - 8 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G9 = np.interp(T - 9 * DTT,Dict_inv['T1'], Dict_inv['N1']) + + # Calculating the average water level in kolk + GGEM = Dict_inv['HKI'] + (0.5 * NV + G1 + G2 + G3 + G4 + G5 + G6 + G7 + G8 + G9 + 0.5 * NW) / 10 + + # Water level at the kas side of the door + HKAS = HKAS - (Dict_inv['MU'] * Tot_A * np.sign(HGEM - GGEM) * + np.sqrt(2 * G * abs(HGEM - GGEM)) / (Dict_inv['BKAS'] * Dict_inv['LKAS'])) * Dict_inv['DT'] + + dH = GGEM-HGEM + + #Toeschrijven uitvoer + L_NAT.append(NAT) + L_NBT.append(NBT) + L_T.append(T) + L_HKAS.append(HKAS) + L_HV.append(HV) + L_HA.append(HA) + L_H5.append(H5) + L_HB.append(HB) + L_HW.append(HW) + L_HGEM.append(HGEM) + L_GGEM.append(GGEM) + L_NV.append(NV) + L_dH.append(dH) + L_H1.append(H1) + L_H2.append(H2) + L_H3.append(H3) + L_H4.append(H4) + L_H6.append(H6) + L_H7.append(H7) + L_H8.append(H8) + L_H9.append(H9) + + J += 1 + T = round(T+Dict_inv['DT'],2) + + # Calculation up to end time + if T >= Dict_inv['TEND']: + break + +#%% +print(T) +print('NAT',NAT,'NBT',NBT,'NV',NV,'NW',NW,'NA',NA,'NB',NB) +plt.plot(L_T,L_HA,label='HA kas') +plt.plot(L_T,L_HB,label='HB kas') +plt.plot(L_T,L_HV,label='Spleet A kolk') +plt.plot(L_T,L_HW,label='Spleet B kolk') +plt.plot(L_T,L_H5,label='H5') +plt.legend() +#plt.xlim([-1,6]) +plt.figure() +plt.plot(L_T,L_HGEM,label='HGEM') +plt.plot(L_T,L_GGEM,label='GGEM') +plt.plot(L_T,L_HKAS,label='HKAS') +plt.plot(L_T,L_dH,label='Verval') +plt.plot(L_T,L_HW,label='WL Kolk spleet B') +plt.plot(L_T,L_HV,label='WL Kolk spleet A') +plt.legend() +#plt.xlim([-1,6]) + +plt.figure() +plt.plot(L_T,L_HV,label='Wl kolk tpv A') +plt.plot(L_T,L_H5,label='H midden deurkas') +plt.plot(L_T,L_HW,label='Wl kolk tpv B') +plt.ylim([-0.4,1.2]) +plt.grid() +plt.xticks([-6,0,6,12,18,24,30]) +plt.legend() + +plt.figure() +plt.plot(L_T,L_dH,label='Verval') +#plt.ylim([-0.4,0.2]) +plt.xlim([0,40]) +plt.grid() +plt.legend() +#plt.xticks([-6,0,6,12,18,24,30]) +#%% +plt.figure() +plt.plot(L_T,L_HA,label='WL Kas zijde A') +plt.plot(L_T,L_HV,label='WL kolk zijde A') +plt.plot(L_T,L_HB,label='WL kaszijde B') +plt.plot(L_T,L_H2) +#plt.plot(L_T,L_H3) +#plt.plot(L_T,L_H4) +#plt.plot(L_T,L_H5) +#plt.plot(L_T,L_H6) +#plt.plot(L_T,L_H7) +#plt.plot(L_T,L_H8) +plt.plot(L_T,L_H9) +plt.legend() + +#%% Read fortran uitvoer +column_names = ['T','HV','HA','H5','HB','HW','HGEM','GGEM','GGEM-HGEM'] +dt_1 = pd.read_csv('Fort_uitv_1dt.out',names=column_names,index_col=False) +dt_10 = pd.read_csv('Fort_uitv_10dt.out',names=column_names,index_col=False) + +plt.plot(dt_1["T"],dt_1["GGEM-HGEM"],label='Verval .FOR 1 dt') +#plt.plot(dt_10["T"],dt_10["GGEM-HGEM"],label='Verval .FOR 10 dt') +plt.plot(L_T,L_dH,label='Verval .py') +plt.legend() +#plt.ylim([-0.1,0.1]) +plt.xlim([0,30]) + +#Readthedocs fig +#%% Read fortran uitvoer +plt.figure(figsize=(8, 4)) +column_names = ['T','HV','HA','H5','HB','HW','HGEM','GGEM','GGEM-HGEM'] +plt.plot(L_T,L_dH) +plt.legend() +plt.xlim([-6,30]) +plt.grid() +plt.xticks([-6,0,6,12,18,24,30]) +plt.ylabel('Verval [m]') +plt.xlabel('Tijd [s]') + +#Uitvoer +# T = tijd [s] +# HV = waterstand kolkzijde voor spleet A [mNAP] +# HA = waterstand kaszijde voor spleet A [mNAP] +# H5 = waterstand kaszijde midden kas [mNAP] +# HB = waterstand kaszijde voor spleet B [mNAP] +# HW = waterstand kolkzijde voor spleet B [mNAP] +# HGEM = gemiddelde waterstand in kas ter plaatse van de deur [mNAP] +# GGEM = gemiddelde waterstand in kolk ter plaatse van de deur [mNAP] +# GGEM - HGEM = gemiddeld verval over de deur [m] + + +# =====EINDE======================================================= + + +#OPmerking 27-09-24 +#Het lijkt mij vreemd dat spleet B meegroeit met H5. Met name het moment dat de golf spleet B bereiekt is gek. Er lijkt iets fout in NB in de eerste loop (ook de tweede) +# %% diff --git a/src/lockgate/Schip/KASGOLF_v5.py b/src/lockgate/Schip/KASGOLF_v5.py new file mode 100644 index 0000000..a380ac0 --- /dev/null +++ b/src/lockgate/Schip/KASGOLF_v5.py @@ -0,0 +1,443 @@ +# PROGRAM KASGOLF + +# Doordringen van golf van langsvarend schip in de deurkas +# Versie 1.00 +# Waterloopkundig Laboratorium Delft +# A. Vrijburcht, 7 september 1993 + +# =====DECLARATIES======================================== + +import numpy as np +import os +import tkinter as tk +from tkinter import filedialog +import math +import matplotlib.pyplot as plt +import pandas as pd + +file_opt = options = {} +options['filetypes'] = [('KASGOLF input files', '.in'), ('all files', '.*')] +options['title'] = 'Select KASGOLF input file' + +# Open file selection dialog +print('Selecting file...') +root = tk.Tk() +root.withdraw() # we don't want a full GUI, so keep the root window from appearing +root.attributes("-topmost", True) +in_file = tk.filedialog.askopenfilename(parent=root, initialdir=os.getcwd(), **file_opt) # show an "Open" dialog box and return the path to the selected file +if not in_file: + raise ValueError('No file selected.') +in_files = [] +in_files.append(in_file) +print('Files selected: %s' % ', '.join(map(str, in_files))) + +Inv_naam = in_file + +T1 = np.zeros(21) #Tijdstabel [s] +N1 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet A [m] +T2 = np.zeros(21) #Tijdtabel 2 (?) [s] +N2 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet ? [m] + +NV=NW=0 + +QA = []#np.zeros(1001) #? +QB = []#np.zeros(1001) #? +G = 9.81 #Gravitatieversnelling [m/s^2] + +# =====INVOER===================================================== + +#HKI = #initiele waterstand [mNAP] +#ZK = #niveau kolk- en deurkasbodem [mNAP] +#LKK = #engte deurkas kolkzijde [m] +#LKAS = #lengte deurkas kaszijde [m] +#BKAS = #breedte deurkas kaszijde [m] +#BA = #breedte verticale spleet A [m] +#BB = #breedte verticale spleet B [m] +#AO = # Oppervlakte deuropening incl. onderzijde deur [m^2] +#MU = #afvoercoeff. verticale spleten A en B [-] +#DT = #tijdstap [s] +#TINIT = #start tijd [s] +#TEND = #eind tijd [s] +#M0 = #keuze golf met translatiesnelheid (=0) of vaarsnelheid (=1) +#VS = #vaarsnelheid [m/s] +#NT1 = #aantal op te geven punten tabel (integer!) + +#Uitlezen invoer bestand +Dict_inv = {} + +#with open(os.path.join(os.getcwd(),Inv_naam), 'r') as file: +with open(Inv_naam, 'r') as file: + for line in file: + if '=' in line: + key, value = line.split('=') + key = key.strip() + value = value.strip() + if ',' in value: + value = list(map(float, value.split(','))) + else: + try: + value = float(value) + except ValueError: + value = int(value) + Dict_inv[key] = value + +# Lengte array voor golven +J = 0 +K = 0 +T = Dict_inv['TINIT'] +HKAS = Dict_inv['HKI'] +QAT = 0 #Debiet in punt A +QBT = 0 #Debiet in punt B +NA = 0 #Gegenereerde golfhoogte punt A +NB = 0 #Gegenereerde golfhoogte punt B +NAT = 0 #Golfhoogte in punt A +NBT = 0 #Golfhoogte in punt B +QA_dum = 0 #Iteratie debiet door spleet A +QB_dum = 0 #Iteratie debiet door spleet B +Tot_A = Dict_inv['AO']#Oppervlak spleet onder deur (spleet 3) + + +# Length of array for waves +CK = np.sqrt(G * (Dict_inv['HKI'] - Dict_inv['ZK'])) #snelheid golf +if Dict_inv['M0'] == 0: + DTG = Dict_inv['LKK'] / CK #looptijd golf in kas bij golfsnelheid (M0 == 0) +else: + DTG = Dict_inv['LKK'] / Dict_inv['VS'] #looptijd golf in kas bij vaarsnelheid (M0 == 1) + +#Check of de vaarsnelheid groter is dan de loopsnelheid translatiegolf. Zo niet, kies andere vaarsnelheid + +## 24-12-2024!!! VS MAG WEL HOGER ZIJN DAN CK. NAMELIJK, HET SCHIP MAG SNELLER DAN CK AANGEZIEN DEZE EEN GOLF VOORTDUWT EN SNELLER BIJ NW KAN ZIJN DAN OP BASIS VAN CK. +## LANGZAMER IS WEL EEN DING, DAN KRIJG JE VOORTPLANTING VAN EEN GOLF VOOR HET SCHIP DIE EERDER BIJ NW IS DAN HET SCHIP. DIT KAN DUS NIET! ZOALS NU OOK IN EHT SCRIPT STAAT +if Dict_inv['M0'] != 0 and Dict_inv['VS'] < CK: + raise ValueError(f'Error! Sailing velocity ship too low! Increase `VS` to >= {math.ceil(CK * 100) / 100} [m/s] or change M0 from 1 to 0 to calculate the wave propagation velocity based on waterdepth!') + + +NKASR = Dict_inv['LKAS'] / CK / Dict_inv['DT'] #Aantal tijdstappen voor golf langs gehele kas +NKAS = int(round(NKASR)) +NK = int(round(NKAS / 10)) +N = int(1.1 * NKAS) + +# =====BEREKENING TRANSLATIEGOLVEN IN DEURKAS===================== +L_T = [] +L_HKAS = [] +L_HV = [] +L_HA = [] +L_H5 = [] +L_HB = [] +L_HW = [] +L_HGEM = [] +L_GGEM = [] +L_NV = [] +L_dH = [] +L_H1 = [] +L_H2 = [] +L_H3 = [] +L_H4 = [] +L_H6 = [] +L_H7 = [] +L_H8 = [] +L_H9 = [] +L_NBT = [] +L_NAT = [] + +''' +#Loop in de tijd voordat de golf bij de kas is +while inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) == HKAS and inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) == HKAS: + L_T.append(T) + L_HKAS.append(HKAS) + L_HV.append(HKAS) + L_HA.append(HKAS) + L_H5.append(HKAS) + L_HB.append(HKAS) + L_HW.append(HKAS) + L_HGEM.append(HKAS) + L_GGEM.append(HKAS) + L_NV.append(NV) + L_dH.append(0) + + J += 1 + T = round(T+Dict_inv['DT'],2) + +Jst_golf = J +''' +#Deze while loop stopt als Teind is bereikt en begint pas als T de tijdstap van begin golf heeft bereikt +while True: + + #Berekenen waterstanden Spleet 1 (NV) en spleet 2 (NW) + #NV = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) + #NW = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) + NV = np.interp(T,Dict_inv['T1'],Dict_inv['N1']) + NW = np.interp(T-DTG,Dict_inv['T1'],Dict_inv['N1']) + + #Lengte van de golf array (vanaf het moment dat de golf langstrekt) + if J <= (N): + #Inkomend debiet via het kaskanaal + if J >= (NKAS): + QAT = QB[J-NKAS] + QBT = QA[J-NKAS] + + NAT = -QAT / (Dict_inv['BKAS']*CK) #Inkomende golfhoogte locatie A + NBT = QBT / (Dict_inv['BKAS']*CK) #Inkomende golfhoogte locatie B + + #De lengte array van de golf is al voorbij + else: + #print('T=',T,QBT, 'NBT=',NBT, 'NB=',NB, QB[len(QB)-1],QB_dum) + #if T == 12.90: + # break + QAT = QB[len(QB)-NKAS] #N-NKAS is 1 hele golflengte geleden (door ck komt debiet van B ten tijde van (N-NKAS) nu aan bij A) + QBT = QA[len(QA)-NKAS] + + #Inkomende golfhoogte door translatiegolf + NAT = -QAT / (Dict_inv['BKAS']*CK) + NBT = QBT / (Dict_inv['BKAS']*CK) + + + max_iterations = 10000 + tolerance = 0.001 + + NAO = 0 + NBO = 0 + + #if T == 6.44: + # break + #Itereren tot juist benadering golfhoogte + for P in range(0,max_iterations+1): + QAO = QA_dum + QBO = QB_dum + NAO = NA + NBO = NB + QB_update = (-Dict_inv['MU'] * Dict_inv['BB'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, NW - NB - NBT) * np.sqrt(2 * G * abs(NW - NB - NBT)) - QBT) + QA_update = (Dict_inv['MU'] * Dict_inv['BA'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, NV - NA - NAT) * np.sqrt(2 * G * abs(NV - NA - NAT)) - QAT) + + QA_dum = QA_update#0.1*QA_update + 0.9*QAO + QB_dum = QB_update#0.1*QB_update + 0.9*QBO + + NAN = QA_dum / (Dict_inv['BKAS']*CK) + NA = 0.9 * NAO + 0.1 * NAN + NBN = -QB_dum / (Dict_inv['BKAS']*CK) + NB = 0.9 * NBO + 0.1 * NBN + + #if abs(NB - NBO) <= tolerance and abs(QB_dum - QBO) <= tolerance and abs(NA - NAO) <= tolerance and abs(QA_dum - QAO) <= tolerance: + if (abs(NB - NBO) <= tolerance and abs(NA - NAO) <= tolerance): + #print('Doet het nu') + break + + else: + print(f'T:{T}; No value found') + + #if T == 4: + # break + + QA.append(QA_dum) + QB.append(QB_dum) + + HV = Dict_inv['HKI'] + NV #waterstand in de kolk + HA = HKAS + NA + NAT #waterstand bij spleet A. Waterstand KAS + + if J >= 9 * NK: + H1 = HKAS + (QA[J - NK] - QB[J - 9 * NK]) / (Dict_inv['BKAS'] * CK) + H9 = HKAS + (QA[J - 9 * NK] - QB[J - NK]) / (Dict_inv['BKAS'] * CK) + elif J >= NK: + H1 = HKAS + QA[J - NK] / (Dict_inv['BKAS'] * CK) + H9 = HKAS - QB[J - NK] / (Dict_inv['BKAS'] * CK) + else: + H1 = HKAS + H9 = HKAS + + if J >= 8 * NK: + H2 = HKAS + (QA[J - 2 * NK] - QB[J - 8 * NK]) / (Dict_inv['BKAS'] * CK) + H8 = HKAS + (QA[J - 8 * NK] - QB[J - 2 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 2 * NK: + H2 = HKAS + QA[J - 2 * NK] / (Dict_inv['BKAS'] * CK) + H8 = HKAS - QB[J - 2 * NK] / (Dict_inv['BKAS'] * CK) + else: + H2 = HKAS + H8 = HKAS + + if J >= 7 * NK: + H3 = HKAS + (QA[J - 3 * NK] - QB[J - 7 * NK]) / (Dict_inv['BKAS'] * CK) + H7 = HKAS + (QA[J - 7 * NK] - QB[J - 3 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 3 * NK: + H3 = HKAS + QA[J - 3 * NK] / (Dict_inv['BKAS'] * CK) + H7 = HKAS - QB[J - 3 * NK] / (Dict_inv['BKAS'] * CK) + else: + H3 = HKAS + H7 = HKAS + + if J >= 6 * NK: + H4 = HKAS + (QA[J - 4 * NK] - QB[J - 6 * NK]) / (Dict_inv['BKAS'] * CK) + H6 = HKAS + (QA[J - 6 * NK] - QB[J - 4 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 4 * NK: + H4 = HKAS + QA[J - 4 * NK] / (Dict_inv['BKAS'] * CK) + H6 = HKAS - QB[J - 4 * NK] / (Dict_inv['BKAS'] * CK) + else: + H4 = HKAS + H6 = HKAS + + if J >= 5*NK: + H5 = HKAS + (QA[J - 5 * NK] - QB[J - 5 * NK]) / (Dict_inv['BKAS'] * CK) + else: + H5 = HKAS + + HB = HKAS + NB + NBT + HW = Dict_inv['HKI'] + NW + + HGEM = (0.5*HA+H1 + H2 + H3 + H4 + H5 + H6 + H7 + H8 + H9+0.5*HB) / 10 + + QAA = QA[J] + QAT + QBB = QB[J] + QBT + + # Constants + DTT = DTG / 10 + + # Calling the inter function for water levels at the lock side + G1 = np.interp(T - 1 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G2 = np.interp(T - 2 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G3 = np.interp(T - 3 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G4 = np.interp(T - 4 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G5 = np.interp(T - 5 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G6 = np.interp(T - 6 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G7 = np.interp(T - 7 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G8 = np.interp(T - 8 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G9 = np.interp(T - 9 * DTT,Dict_inv['T1'], Dict_inv['N1']) + + # Calculating the average water level in kolk + GGEM = Dict_inv['HKI'] + (0.5 * NV + G1 + G2 + G3 + G4 + G5 + G6 + G7 + G8 + G9 + 0.5 * NW) / 10 + + # Water level at the kas side of the door + HKAS = HKAS - (Dict_inv['MU'] * Tot_A * np.sign(HGEM - GGEM) * + np.sqrt(2 * G * abs(HGEM - GGEM)) / (Dict_inv['BKAS'] * Dict_inv['LKAS'])) * Dict_inv['DT'] + + dH = GGEM-HGEM + + #Toeschrijven uitvoer + L_NAT.append(NAT) + L_NBT.append(NBT) + L_T.append(T) + L_HKAS.append(HKAS) + L_HV.append(HV) + L_HA.append(HA) + L_H5.append(H5) + L_HB.append(HB) + L_HW.append(HW) + L_HGEM.append(HGEM) + L_GGEM.append(GGEM) + L_NV.append(NV) + L_dH.append(dH) + L_H1.append(H1) + L_H2.append(H2) + L_H3.append(H3) + L_H4.append(H4) + L_H6.append(H6) + L_H7.append(H7) + L_H8.append(H8) + L_H9.append(H9) + + J += 1 + T = round(T+Dict_inv['DT'],2) + + # Calculation up to end time + if T >= Dict_inv['TEND']: + break + +#%% +print(T) +print('NAT',NAT,'NBT',NBT,'NV',NV,'NW',NW,'NA',NA,'NB',NB) +plt.plot(L_T,L_HA,label='HA kas') +plt.plot(L_T,L_HB,label='HB kas') +plt.plot(L_T,L_HV,label='Spleet A kolk') +plt.plot(L_T,L_HW,label='Spleet B kolk') +plt.plot(L_T,L_H5,label='H5') +plt.legend() +#plt.xlim([-1,6]) +plt.figure() +plt.plot(L_T,L_HGEM,label='HGEM') +plt.plot(L_T,L_GGEM,label='GGEM') +plt.plot(L_T,L_HKAS,label='HKAS') +plt.plot(L_T,L_dH,label='Verval') +plt.plot(L_T,L_HW,label='WL Kolk spleet B') +plt.plot(L_T,L_HV,label='WL Kolk spleet A') +plt.legend() +#plt.xlim([-1,6]) + +plt.figure() +plt.plot(L_T,L_HV,label='Wl kolk tpv A') +plt.plot(L_T,L_H5,label='H midden deurkas') +plt.plot(L_T,L_HW,label='Wl kolk tpv B') +plt.ylim([-0.4,1.2]) +plt.grid() +plt.xticks([-6,0,6,12,18,24,30]) +plt.legend() + +plt.figure() +plt.plot(L_T,L_dH,label='Verval') +#plt.ylim([-0.4,0.2]) +plt.xlim([0,40]) +plt.grid() +plt.legend() +#plt.xticks([-6,0,6,12,18,24,30]) +#%% +plt.figure() +plt.plot(L_T,L_HA,label='WL Kas zijde A') +plt.plot(L_T,L_HV,label='WL kolk zijde A') +plt.plot(L_T,L_HB,label='WL kaszijde B') +plt.plot(L_T,L_H2) +#plt.plot(L_T,L_H3) +#plt.plot(L_T,L_H4) +#plt.plot(L_T,L_H5) +#plt.plot(L_T,L_H6) +#plt.plot(L_T,L_H7) +#plt.plot(L_T,L_H8) +plt.plot(L_T,L_H9) +plt.legend() + +#%% Read fortran uitvoer +column_names = ['T','HV','HA','H5','HB','HW','HGEM','GGEM','GGEM-HGEM'] +dt_1 = pd.read_csv('Fort_uitv_1dt.out',names=column_names,index_col=False) +dt_10 = pd.read_csv('Fort_uitv_10dt.out',names=column_names,index_col=False) + +plt.plot(dt_1["T"],dt_1["GGEM-HGEM"],label='Verval .FOR 1 dt') +#plt.plot(dt_10["T"],dt_10["GGEM-HGEM"],label='Verval .FOR 10 dt') +plt.plot(L_T,L_dH,label='Verval .py') +plt.legend() +#plt.ylim([-0.1,0.1]) +plt.xlim([0,30]) + +#Readthedocs fig +#%% Python output figure +plt.figure(figsize=(8, 4)) +column_names = ['T','HV','HA','H5','HB','HW','HGEM','GGEM','GGEM-HGEM'] +plt.plot(L_T,L_dH) +plt.legend() +plt.xlim([-6,30]) +plt.grid() +plt.xticks([-6,0,6,12,18,24,30]) +plt.ylabel('Verval [m]') +plt.xlabel('Tijd [s]') + +directory, file_name = os.path.split(in_file) +output_file = os.path.join(directory, os.path.splitext(file_name)[0] + '.png') + + +plt.savefig(f'{output_file}') + +#Uitvoer +# T = tijd [s] +# HV = waterstand kolkzijde voor spleet A [mNAP] +# HA = waterstand kaszijde voor spleet A [mNAP] +# H5 = waterstand kaszijde midden kas [mNAP] +# HB = waterstand kaszijde voor spleet B [mNAP] +# HW = waterstand kolkzijde voor spleet B [mNAP] +# HGEM = gemiddelde waterstand in kas ter plaatse van de deur [mNAP] +# GGEM = gemiddelde waterstand in kolk ter plaatse van de deur [mNAP] +# GGEM - HGEM = gemiddeld verval over de deur [m] + + +# =====EINDE======================================================= + + +#OPmerking 27-09-24 +#Het lijkt mij vreemd dat spleet B meegroeit met H5. Met name het moment dat de golf spleet B bereiekt is gek. Er lijkt iets fout in NB in de eerste loop (ook de tweede) +# %% diff --git a/src/lockgate/Schip/KASGOLF_v5_1_voor_vergelijk_sensitivity_analysis.py b/src/lockgate/Schip/KASGOLF_v5_1_voor_vergelijk_sensitivity_analysis.py new file mode 100644 index 0000000..d89228e --- /dev/null +++ b/src/lockgate/Schip/KASGOLF_v5_1_voor_vergelijk_sensitivity_analysis.py @@ -0,0 +1,481 @@ +# PROGRAM KASGOLF + +# Doordringen van golf van langsvarend schip in de deurkas +# Versie 1.00 +# Waterloopkundig Laboratorium Delft +# A. Vrijburcht, 7 september 1993 + +# =====DECLARATIES======================================== + +import numpy as np +import os +import tkinter as tk +from tkinter import filedialog +import math +import matplotlib.pyplot as plt +import pandas as pd + +file_opt = options = {} +options['filetypes'] = [('KASGOLF input files', '.in'), ('all files', '.*')] +options['title'] = 'Select KASGOLF input file' + +# Open file selection dialog +print('Selecting file...') +root = tk.Tk() +root.withdraw() # we don't want a full GUI, so keep the root window from appearing +root.attributes("-topmost", True) +in_file = tk.filedialog.askopenfilename(parent=root, initialdir=os.getcwd(), **file_opt) # show an "Open" dialog box and return the path to the selected file +if not in_file: + raise ValueError('No file selected.') +in_files = [] +in_files.append(in_file) +print('Files selected: %s' % ', '.join(map(str, in_files))) + +Inv_naam = in_file + +T1 = np.zeros(21) #Tijdstabel [s] +N1 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet A [m] +T2 = np.zeros(21) #Tijdtabel 2 (?) [s] +N2 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet ? [m] + +NV=NW=0 + +QA = []#np.zeros(1001) #? +QB = []#np.zeros(1001) #? +G = 9.81 #Gravitatieversnelling [m/s^2] + +# =====INVOER===================================================== + +#HKI = #initiele waterstand [mNAP] +#ZK = #niveau kolk- en deurkasbodem [mNAP] +#LKK = #engte deurkas kolkzijde [m] +#LKAS = #lengte deurkas kaszijde [m] +#BKAS = #breedte deurkas kaszijde [m] +#BA = #breedte verticale spleet A [m] +#BB = #breedte verticale spleet B [m] +#AO = # Oppervlakte deuropening incl. onderzijde deur [m^2] +#MU = #afvoercoeff. verticale spleten A en B [-] +#DT = #tijdstap [s] +#TINIT = #start tijd [s] +#TEND = #eind tijd [s] +#M0 = #keuze golf met translatiesnelheid (=0) of vaarsnelheid (=1) +#VS = #vaarsnelheid [m/s] +#NT1 = #aantal op te geven punten tabel (integer!) + +#Uitlezen invoer bestand +Dict_inv = {} + +#with open(os.path.join(os.getcwd(),Inv_naam), 'r') as file: +with open(Inv_naam, 'r') as file: + for line in file: + if '=' in line: + key, value = line.split('=') + key = key.strip() + value = value.strip() + if ',' in value: + value = list(map(float, value.split(','))) + else: + try: + value = float(value) + except ValueError: + value = int(value) + Dict_inv[key] = value + +uitvoer_set = pd.DataFrame() + +set_values = [-5,0,1,2.5,3.5,30]#[0,1,2] +set_values2 = [0,0,-0.05,-0.3,-0.35,-0.35] +for i in range(0,1):#len(set_values)): + + #test1 + Dict_inv['VS'] = Dict_inv['VS'] #set_values[i]# + Dict_inv['M0'] = Dict_inv['M0']#set_values2[i]# + #test2 + Dict_inv['BKAS'] = Dict_inv['BKAS'] #set_values[i]# + #test3 + Dict_inv['BB'] = Dict_inv['BB'] #set_values[i]# + Dict_inv['BA'] = Dict_inv['BA'] #set_values[i]# + #Test4 + Dict_inv['AO'] = Dict_inv['AO']#set_values[i]# + #Test5 + Dict_inv['DT'] = Dict_inv['DT']#set_values[i]# + #Test6 + Dict_inv['T1'] = set_values#Dict_inv['T1']# + Dict_inv['N1'] = set_values2#Dict_inv['N1']# + + NV=NW=0 + + QA = []#np.zeros(1001) #? + QB = []#np.zeros(1001) #? + G = 9.81 #Gravitatieversnelling [m/s^2] + + # Lengte array voor golven + J = 0 + K = 0 + T = Dict_inv['TINIT'] + HKAS = Dict_inv['HKI'] + QAT = 0 #Debiet in punt A + QBT = 0 #Debiet in punt B + NA = 0 #Gegenereerde golfhoogte punt A + NB = 0 #Gegenereerde golfhoogte punt B + NAT = 0 #Golfhoogte in punt A + NBT = 0 #Golfhoogte in punt B + QA_dum = 0 #Iteratie debiet door spleet A + QB_dum = 0 #Iteratie debiet door spleet B + Tot_A = Dict_inv['AO']#Oppervlak spleet onder deur (spleet 3) + + # Length of array for waves + CK = np.sqrt(G * (Dict_inv['HKI'] - Dict_inv['ZK'])) #snelheid golf + if Dict_inv['M0'] == 0: + DTG = Dict_inv['LKK'] / CK #looptijd golf in kas bij golfsnelheid (M0 == 0) + else: + DTG = Dict_inv['LKK'] / Dict_inv['VS'] #looptijd golf in kas bij vaarsnelheid (M0 == 1) + + #Check of de vaarsnelheid groter is dan de loopsnelheid translatiegolf. Zo niet, kies andere vaarsnelheid + if Dict_inv['M0'] != 0 and Dict_inv['VS'] < CK: + raise ValueError(f'Error! Sailing velocity ship too low! Increase `VS` to >= {math.ceil(CK * 100) / 100} [m/s] or change M0 from 1 to 0 to calculate the wave propagation velocity based on waterdepth!') + + NKASR = Dict_inv['LKAS'] / CK / Dict_inv['DT'] #Aantal tijdstappen voor golf langs gehele kas + NKAS = int(round(NKASR)) + NK = int(round(NKAS / 10)) + N = int(1.1 * NKAS) + + # =====BEREKENING TRANSLATIEGOLVEN IN DEURKAS===================== + L_NA = [] + L_NB = [] + L_T = [] + L_HKAS = [] + L_HV = [] + L_HA = [] + L_H5 = [] + L_HB = [] + L_HW = [] + L_HGEM = [] + L_GGEM = [] + L_NV = [] + L_dH = [] + L_H1 = [] + L_H2 = [] + L_H3 = [] + L_H4 = [] + L_H6 = [] + L_H7 = [] + L_H8 = [] + L_H9 = [] + L_NBT = [] + L_NAT = [] + + ''' + #Loop in de tijd voordat de golf bij de kas is + while inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) == HKAS and inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) == HKAS: + L_T.append(T) + L_HKAS.append(HKAS) + L_HV.append(HKAS) + L_HA.append(HKAS) + L_H5.append(HKAS) + L_HB.append(HKAS) + L_HW.append(HKAS) + L_HGEM.append(HKAS) + L_GGEM.append(HKAS) + L_NV.append(NV) + L_dH.append(0) + + J += 1 + T = round(T+Dict_inv['DT'],2) + + Jst_golf = J + ''' + + #Deze while loop stopt als Teind is bereikt en begint pas als T de tijdstap van begin golf heeft bereikt + while True: + + #Berekenen waterstanden Spleet 1 (NV) en spleet 2 (NW) + #NV = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) + #NW = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) + NV = np.interp(T,Dict_inv['T1'],Dict_inv['N1']) + NW = np.interp(T-DTG,Dict_inv['T1'],Dict_inv['N1']) + + #Lengte van de golf array (vanaf het moment dat de golf langstrekt) + if J <= (N): + #Inkomend debiet via het kaskanaal + if J >= (NKAS): + QAT = QB[J-NKAS] + QBT = QA[J-NKAS] + + NAT = -QAT / (Dict_inv['BKAS']*CK) #Inkomende golfhoogte locatie A + NBT = QBT / (Dict_inv['BKAS']*CK) #Inkomende golfhoogte locatie B + + #De lengte array van de golf is al voorbij + else: + #print('T=',T,QBT, 'NBT=',NBT, 'NB=',NB, QB[len(QB)-1],QB_dum) + #if T == 12.90: + # break + QAT = QB[len(QB)-NKAS] #N-NKAS is 1 hele golflengte geleden (door ck komt debiet van B ten tijde van (N-NKAS) nu aan bij A) + QBT = QA[len(QA)-NKAS] + + #Inkomende golfhoogte door translatiegolf + NAT = -QAT / (Dict_inv['BKAS']*CK) + NBT = QBT / (Dict_inv['BKAS']*CK) + + + max_iterations = 10000 + tolerance = 0.001 + + NAO = 0 + NBO = 0 + + #if T == 6.44: + # break + #Itereren tot juist benadering golfhoogte + for P in range(0,max_iterations+1): + QAO = QA_dum + QBO = QB_dum + NAO = NA + NBO = NB + QB_update = (-Dict_inv['MU'] * Dict_inv['BB'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, NW - NB - NBT) * np.sqrt(2 * G * abs(NW - NB - NBT)) - QBT) + QA_update = (Dict_inv['MU'] * Dict_inv['BA'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, NV - NA - NAT) * np.sqrt(2 * G * abs(NV - NA - NAT)) - QAT) + + QA_dum = QA_update#0.1*QA_update + 0.9*QAO + QB_dum = QB_update#0.1*QB_update + 0.9*QBO + + NAN = QA_dum / (Dict_inv['BKAS']*CK) + NA = 0.9 * NAO + 0.1 * NAN + NBN = -QB_dum / (Dict_inv['BKAS']*CK) + NB = 0.9 * NBO + 0.1 * NBN + + #if abs(NB - NBO) <= tolerance and abs(QB_dum - QBO) <= tolerance and abs(NA - NAO) <= tolerance and abs(QA_dum - QAO) <= tolerance: + if (abs(NB - NBO) <= tolerance and abs(NA - NAO) <= tolerance): + #print('Doet het nu') + break + + else: + print(f'T:{T}; No value found') + + #if T == 4: + # break + + QA.append(QA_dum) + QB.append(QB_dum) + + HV = Dict_inv['HKI'] + NV #waterstand in de kolk + HA = HKAS + NA + NAT #waterstand bij spleet A. Waterstand KAS + + if J >= 9 * NK: + H1 = HKAS + (QA[J - NK] - QB[J - 9 * NK]) / (Dict_inv['BKAS'] * CK) + H9 = HKAS + (QA[J - 9 * NK] - QB[J - NK]) / (Dict_inv['BKAS'] * CK) + elif J >= NK: + H1 = HKAS + QA[J - NK] / (Dict_inv['BKAS'] * CK) + H9 = HKAS - QB[J - NK] / (Dict_inv['BKAS'] * CK) + else: + H1 = HKAS + H9 = HKAS + + if J >= 8 * NK: + H2 = HKAS + (QA[J - 2 * NK] - QB[J - 8 * NK]) / (Dict_inv['BKAS'] * CK) + H8 = HKAS + (QA[J - 8 * NK] - QB[J - 2 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 2 * NK: + H2 = HKAS + QA[J - 2 * NK] / (Dict_inv['BKAS'] * CK) + H8 = HKAS - QB[J - 2 * NK] / (Dict_inv['BKAS'] * CK) + else: + H2 = HKAS + H8 = HKAS + + if J >= 7 * NK: + H3 = HKAS + (QA[J - 3 * NK] - QB[J - 7 * NK]) / (Dict_inv['BKAS'] * CK) + H7 = HKAS + (QA[J - 7 * NK] - QB[J - 3 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 3 * NK: + H3 = HKAS + QA[J - 3 * NK] / (Dict_inv['BKAS'] * CK) + H7 = HKAS - QB[J - 3 * NK] / (Dict_inv['BKAS'] * CK) + else: + H3 = HKAS + H7 = HKAS + + if J >= 6 * NK: + H4 = HKAS + (QA[J - 4 * NK] - QB[J - 6 * NK]) / (Dict_inv['BKAS'] * CK) + H6 = HKAS + (QA[J - 6 * NK] - QB[J - 4 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 4 * NK: + H4 = HKAS + QA[J - 4 * NK] / (Dict_inv['BKAS'] * CK) + H6 = HKAS - QB[J - 4 * NK] / (Dict_inv['BKAS'] * CK) + else: + H4 = HKAS + H6 = HKAS + + if J >= 5*NK: + H5 = HKAS + (QA[J - 5 * NK] - QB[J - 5 * NK]) / (Dict_inv['BKAS'] * CK) + else: + H5 = HKAS + + HB = HKAS + NB + NBT + HW = Dict_inv['HKI'] + NW + + HGEM = (0.5*HA+H1 + H2 + H3 + H4 + H5 + H6 + H7 + H8 + H9+0.5*HB) / 10 + + QAA = QA[J] + QAT + QBB = QB[J] + QBT + + # Constants + DTT = DTG / 10 + + # Calling the inter function for water levels at the lock side + G1 = np.interp(T - 1 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G2 = np.interp(T - 2 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G3 = np.interp(T - 3 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G4 = np.interp(T - 4 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G5 = np.interp(T - 5 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G6 = np.interp(T - 6 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G7 = np.interp(T - 7 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G8 = np.interp(T - 8 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G9 = np.interp(T - 9 * DTT,Dict_inv['T1'], Dict_inv['N1']) + + # Calculating the average water level in kolk + GGEM = Dict_inv['HKI'] + (0.5 * NV + G1 + G2 + G3 + G4 + G5 + G6 + G7 + G8 + G9 + 0.5 * NW) / 10 + + # Water level at the kas side of the door + HKAS = HKAS - (Dict_inv['MU'] * Tot_A * np.sign(HGEM - GGEM) * + np.sqrt(2 * G * abs(HGEM - GGEM)) / (Dict_inv['BKAS'] * Dict_inv['LKAS'])) * Dict_inv['DT'] + + dH = GGEM-HGEM + + #Toeschrijven uitvoer + L_NA.append(NA) + L_NB.append(NB) + L_NAT.append(NAT) + L_NBT.append(NBT) + L_T.append(T) + L_HKAS.append(HKAS) + L_HV.append(HV) + L_HA.append(HA) + L_H5.append(H5) + L_HB.append(HB) + L_HW.append(HW) + L_HGEM.append(HGEM) + L_GGEM.append(GGEM) + L_NV.append(NV) + L_dH.append(dH) + L_H1.append(H1) + L_H2.append(H2) + L_H3.append(H3) + L_H4.append(H4) + L_H6.append(H6) + L_H7.append(H7) + L_H8.append(H8) + L_H9.append(H9) + + J += 1 + T = round(T+Dict_inv['DT'],2) + + # Calculation up to end time + if T >= Dict_inv['TEND']: + column_name = f"Column{i + 1}" + uitvoer_set[column_name] = L_dH + break + +'''#%% + +print(T) +print('NAT',NAT,'NBT',NBT,'NV',NV,'NW',NW,'NA',NA,'NB',NB) +plt.plot(L_T,L_HA,label='HA kas') +plt.plot(L_T,L_HB,label='HB kas') +plt.plot(L_T,L_HV,label='Spleet A kolk') +plt.plot(L_T,L_HW,label='Spleet B kolk') +plt.plot(L_T,L_H5,label='H5') +plt.legend() +#plt.xlim([-1,6]) +plt.figure() +plt.plot(L_T,L_HGEM,label='HGEM') +plt.plot(L_T,L_GGEM,label='GGEM') +plt.plot(L_T,L_HKAS,label='HKAS') +plt.plot(L_T,L_dH,label='Verval') +plt.plot(L_T,L_HW,label='WL Kolk spleet B') +plt.plot(L_T,L_HV,label='WL Kolk spleet A') +plt.legend() +#plt.xlim([-1,6]) + +plt.figure() +plt.plot(L_T,L_HV,label='Wl kolk tpv A') +plt.plot(L_T,L_H5,label='H midden deurkas') +plt.plot(L_T,L_HW,label='Wl kolk tpv B') +plt.ylim([-0.4,1.2]) +plt.grid() +plt.xticks([-6,0,6,12,18,24,30]) +plt.legend() + +plt.figure() +plt.plot(L_T,L_dH,label='Verval') +#plt.ylim([-0.4,0.2]) +plt.xlim([0,40]) +plt.grid() +plt.legend() +#plt.xticks([-6,0,6,12,18,24,30]) +''' +'''#%% +plt.figure() +plt.plot(L_T,L_HA,label='WL Kas zijde A') +plt.plot(L_T,L_HV,label='WL kolk zijde A') +plt.plot(L_T,L_HB,label='WL kaszijde B') +plt.plot(L_T,L_H2) +#plt.plot(L_T,L_H3) +#plt.plot(L_T,L_H4) +#plt.plot(L_T,L_H5) +#plt.plot(L_T,L_H6) +#plt.plot(L_T,L_H7) +#plt.plot(L_T,L_H8) +plt.plot(L_T,L_H9) +plt.legend() + +# Read fortran uitvoer +column_names = ['T','HV','HA','H5','HB','HW','HGEM','GGEM','GGEM-HGEM'] +dt_1 = pd.read_csv('Fort_uitv_1dt.out',names=column_names,index_col=False) +dt_10 = pd.read_csv('Fort_uitv_10dt.out',names=column_names,index_col=False) + +plt.plot(dt_1["T"],dt_1["GGEM-HGEM"],label='Verval .FOR 1 dt') +#plt.plot(dt_10["T"],dt_10["GGEM-HGEM"],label='Verval .FOR 10 dt') +plt.plot(L_T,L_dH,label='Verval .py') +plt.legend() +#plt.ylim([-0.1,0.1]) +plt.xlim([0,30]) + +'''#Readthedocs fig +#%% Python output figure +plt.figure(figsize=(8, 4)) +plt.plot(L_T,uitvoer_set) +plt.legend(['Smooth wave'])#['M0=0','M0=1 with VS=8.0 [m/s]'])#,'DT=0.01 [s]','DT=0.10 [s]'],loc='upper left') +plt.xlim([-6,30]) +plt.grid() +plt.xticks([-6,0,6,12,18,24,30]) +plt.ylabel('Head difference [m]') +plt.xlabel('Time [s]') + +directory, file_name = os.path.split(in_file) +output_file = os.path.join(directory, os.path.splitext(file_name)[0] + '.png') + +plt.savefig(f'{output_file}') + +#Plot instant en smooth wave +#plt.plot([-5,0,0.02,30],[0,0,-0.35,-0.35]) +#plt.plot(set_values,set_values2) +#plt.xlim([-1,6]) +#plt.legend(['Instant wave','Smooth wave']) +#plt.xlabel('Time [s]') +#plt.ylabel('Waterlevel [mNAP]') + +#Uitvoer +# T = tijd [s] +# HV = waterstand kolkzijde voor spleet A [mNAP] +# HA = waterstand kaszijde voor spleet A [mNAP] +# H5 = waterstand kaszijde midden kas [mNAP] +# HB = waterstand kaszijde voor spleet B [mNAP] +# HW = waterstand kolkzijde voor spleet B [mNAP] +# HGEM = gemiddelde waterstand in kas ter plaatse van de deur [mNAP] +# GGEM = gemiddelde waterstand in kolk ter plaatse van de deur [mNAP] +# GGEM - HGEM = gemiddeld verval over de deur [m] + + +# =====EINDE======================================================= + + +#OPmerking 27-09-24 +#Het lijkt mij vreemd dat spleet B meegroeit met H5. Met name het moment dat de golf spleet B bereiekt is gek. Er lijkt iets fout in NB in de eerste loop (ook de tweede) +# %% diff --git a/src/lockgate/Schip/KASGOLF_v6.py b/src/lockgate/Schip/KASGOLF_v6.py new file mode 100644 index 0000000..823e6ab --- /dev/null +++ b/src/lockgate/Schip/KASGOLF_v6.py @@ -0,0 +1,437 @@ +# PROGRAM KASGOLF + +# Doordringen van golf van langsvarend schip in de deurkas +# Versie 1.00 +# Waterloopkundig Laboratorium Delft +# A. Vrijburcht, 7 september 1993 + +# =====DECLARATIES======================================== + +import numpy as np +import os +import tkinter as tk +from tkinter import filedialog +import math +import matplotlib.pyplot as plt +import pandas as pd + +file_opt = options = {} +options['filetypes'] = [('KASGOLF input files', '.in'), ('all files', '.*')] +options['title'] = 'Select KASGOLF input file' + +# Open file selection dialog +print('Selecting file...') +root = tk.Tk() +root.withdraw() # we don't want a full GUI, so keep the root window from appearing +root.attributes("-topmost", True) +in_file = tk.filedialog.askopenfilename(parent=root, initialdir=os.getcwd(), **file_opt) # show an "Open" dialog box and return the path to the selected file +if not in_file: + raise ValueError('No file selected.') +in_files = [] +in_files.append(in_file) +print('Files selected: %s' % ', '.join(map(str, in_files))) + +Inv_naam = in_file + +T1 = np.zeros(21) #Tijdstabel [s] +N1 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet A [m] +T2 = np.zeros(21) #Tijdtabel 2 (?) [s] +N2 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet ? [m] + +NV=NW=0 + +QA = []#np.zeros(1001) #? +QB = []#np.zeros(1001) #? +G = 9.81 #Gravitatieversnelling [m/s^2] + +# =====INVOER===================================================== + +#HKI = #initiele waterstand [mNAP] +#ZK = #niveau kolk- en deurkasbodem [mNAP] +#LKK = #engte deurkas kolkzijde [m] +#LKAS = #lengte deurkas kaszijde [m] +#BKAS = #breedte deurkas kaszijde [m] +#BA = #breedte verticale spleet A [m] +#BB = #breedte verticale spleet B [m] +#AO = # Oppervlakte deuropening incl. onderzijde deur [m^2] +#MU = #afvoercoeff. verticale spleten A en B [-] +#DT = #tijdstap [s] +#TINIT = #start tijd [s] +#TEND = #eind tijd [s] +#M0 = #keuze golf met translatiesnelheid (=0) of vaarsnelheid (=1) +#VS = #vaarsnelheid [m/s] +#NT1 = #aantal op te geven punten tabel (integer!) + +#Uitlezen invoer bestand +Dict_inv = {} + +#with open(os.path.join(os.getcwd(),Inv_naam), 'r') as file: +with open(Inv_naam, 'r') as file: + for line in file: + if '=' in line: + key, value = line.split('=') + key = key.strip() + value = value.strip() + if ',' in value: + value = list(map(float, value.split(','))) + else: + try: + value = float(value) + except ValueError: + value = int(value) + Dict_inv[key] = value + +# Lengte array voor golven +J = 0 +K = 0 +T = Dict_inv['TINIT'] +HKAS = Dict_inv['HKI'] +QAT = 0 #Debiet in punt A +QBT = 0 #Debiet in punt B +NA = 0 #Gegenereerde golfhoogte punt A +NB = 0 #Gegenereerde golfhoogte punt B +NAT = 0 #Golfhoogte in punt A +NBT = 0 #Golfhoogte in punt B +QA_dum = 0 #Iteratie debiet door spleet A +QB_dum = 0 #Iteratie debiet door spleet B +Tot_A = Dict_inv['AO']#Oppervlak spleet onder deur (spleet 3) + + +# Length of array for waves +CK = np.sqrt(G * (Dict_inv['HKI'] - Dict_inv['ZK'])) #snelheid golf +if Dict_inv['M0'] == 0: + DTG = Dict_inv['LKK'] / CK #looptijd golf in kas bij golfsnelheid (M0 == 0) +else: + DTG = Dict_inv['LKK'] / Dict_inv['VS'] #looptijd golf in kas bij vaarsnelheid (M0 == 1) + +## 02-01-2025: Sluizenboek paragraaf 11.4.4.1/2/3 bevatten theorie over het ontstaan van de boeggolf en waterspiegelverlaging langszij een in- en uitvarend schip bij een sluis. +## Deze 'boeggolf' en 'waterspiegelverlaging langszij het schip' planten zich voort met de vaarsnelheid van het schip, ongeacht de propagation velocity op basis van shallow wave theory. Alleen als de boeggolf het schip 'loslaat' versnelt deze volgens shallow wave theory. +NKASR = Dict_inv['LKAS'] / CK / Dict_inv['DT'] #Aantal tijdstappen voor golf langs gehele kas +NKAS = int(round(NKASR)) +NK = int(round(NKAS / 10)) +N = int(1.1 * NKAS) + +# =====BEREKENING TRANSLATIEGOLVEN IN DEURKAS===================== +L_T = [] +L_HKAS = [] +L_HV = [] +L_HA = [] +L_H5 = [] +L_HB = [] +L_HW = [] +L_HGEM = [] +L_GGEM = [] +L_NV = [] +L_dH = [] +L_H1 = [] +L_H2 = [] +L_H3 = [] +L_H4 = [] +L_H6 = [] +L_H7 = [] +L_H8 = [] +L_H9 = [] +L_NBT = [] +L_NAT = [] + +''' +#Loop in de tijd voordat de golf bij de kas is +while inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) == HKAS and inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) == HKAS: + L_T.append(T) + L_HKAS.append(HKAS) + L_HV.append(HKAS) + L_HA.append(HKAS) + L_H5.append(HKAS) + L_HB.append(HKAS) + L_HW.append(HKAS) + L_HGEM.append(HKAS) + L_GGEM.append(HKAS) + L_NV.append(NV) + L_dH.append(0) + + J += 1 + T = round(T+Dict_inv['DT'],2) + +Jst_golf = J +''' +#Deze while loop stopt als Teind is bereikt en begint pas als T de tijdstap van begin golf heeft bereikt +while True: + + #Berekenen waterstanden Spleet 1 (NV) en spleet 2 (NW) + #NV = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) + #NW = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) + NV = np.interp(T,Dict_inv['T1'],Dict_inv['N1']) + NW = np.interp(T-DTG,Dict_inv['T1'],Dict_inv['N1']) + + #Lengte van de golf array (vanaf het moment dat de golf langstrekt) + if J <= (N): + #Inkomend debiet via het kaskanaal + if J >= (NKAS): + QAT = QB[J-NKAS] + QBT = QA[J-NKAS] + + NAT = -QAT / (Dict_inv['BKAS']*CK) #Inkomende golfhoogte locatie A + NBT = QBT / (Dict_inv['BKAS']*CK) #Inkomende golfhoogte locatie B + + #De lengte array van de golf is al voorbij + else: + #print('T=',T,QBT, 'NBT=',NBT, 'NB=',NB, QB[len(QB)-1],QB_dum) + #if T == 12.90: + # break + QAT = QB[len(QB)-NKAS] #N-NKAS is 1 hele golflengte geleden (door ck komt debiet van B ten tijde van (N-NKAS) nu aan bij A) + QBT = QA[len(QA)-NKAS] + + #Inkomende golfhoogte door translatiegolf + NAT = -QAT / (Dict_inv['BKAS']*CK) + NBT = QBT / (Dict_inv['BKAS']*CK) + + + max_iterations = 10000 + tolerance = 0.001 + + NAO = 0 + NBO = 0 + + #if T == 6.44: + # break + #Itereren tot juist benadering golfhoogte + for P in range(0,max_iterations+1): + QAO = QA_dum + QBO = QB_dum + NAO = NA + NBO = NB + QB_update = (-Dict_inv['MU'] * Dict_inv['BB'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, NW - NB - NBT) * np.sqrt(2 * G * abs(NW - NB - NBT)) - QBT) + QA_update = (Dict_inv['MU'] * Dict_inv['BA'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, NV - NA - NAT) * np.sqrt(2 * G * abs(NV - NA - NAT)) - QAT) + + QA_dum = QA_update#0.1*QA_update + 0.9*QAO + QB_dum = QB_update#0.1*QB_update + 0.9*QBO + + NAN = QA_dum / (Dict_inv['BKAS']*CK) + NA = 0.9 * NAO + 0.1 * NAN + NBN = -QB_dum / (Dict_inv['BKAS']*CK) + NB = 0.9 * NBO + 0.1 * NBN + + #if abs(NB - NBO) <= tolerance and abs(QB_dum - QBO) <= tolerance and abs(NA - NAO) <= tolerance and abs(QA_dum - QAO) <= tolerance: + if (abs(NB - NBO) <= tolerance and abs(NA - NAO) <= tolerance): + #print('Doet het nu') + break + + else: + print(f'T:{T}; No value found') + + #if T == 4: + # break + + QA.append(QA_dum) + QB.append(QB_dum) + + HV = Dict_inv['HKI'] + NV #waterstand in de kolk + HA = HKAS + NA + NAT #waterstand bij spleet A. Waterstand KAS + + if J >= 9 * NK: + H1 = HKAS + (QA[J - NK] - QB[J - 9 * NK]) / (Dict_inv['BKAS'] * CK) + H9 = HKAS + (QA[J - 9 * NK] - QB[J - NK]) / (Dict_inv['BKAS'] * CK) + elif J >= NK: + H1 = HKAS + QA[J - NK] / (Dict_inv['BKAS'] * CK) + H9 = HKAS - QB[J - NK] / (Dict_inv['BKAS'] * CK) + else: + H1 = HKAS + H9 = HKAS + + if J >= 8 * NK: + H2 = HKAS + (QA[J - 2 * NK] - QB[J - 8 * NK]) / (Dict_inv['BKAS'] * CK) + H8 = HKAS + (QA[J - 8 * NK] - QB[J - 2 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 2 * NK: + H2 = HKAS + QA[J - 2 * NK] / (Dict_inv['BKAS'] * CK) + H8 = HKAS - QB[J - 2 * NK] / (Dict_inv['BKAS'] * CK) + else: + H2 = HKAS + H8 = HKAS + + if J >= 7 * NK: + H3 = HKAS + (QA[J - 3 * NK] - QB[J - 7 * NK]) / (Dict_inv['BKAS'] * CK) + H7 = HKAS + (QA[J - 7 * NK] - QB[J - 3 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 3 * NK: + H3 = HKAS + QA[J - 3 * NK] / (Dict_inv['BKAS'] * CK) + H7 = HKAS - QB[J - 3 * NK] / (Dict_inv['BKAS'] * CK) + else: + H3 = HKAS + H7 = HKAS + + if J >= 6 * NK: + H4 = HKAS + (QA[J - 4 * NK] - QB[J - 6 * NK]) / (Dict_inv['BKAS'] * CK) + H6 = HKAS + (QA[J - 6 * NK] - QB[J - 4 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 4 * NK: + H4 = HKAS + QA[J - 4 * NK] / (Dict_inv['BKAS'] * CK) + H6 = HKAS - QB[J - 4 * NK] / (Dict_inv['BKAS'] * CK) + else: + H4 = HKAS + H6 = HKAS + + if J >= 5*NK: + H5 = HKAS + (QA[J - 5 * NK] - QB[J - 5 * NK]) / (Dict_inv['BKAS'] * CK) + else: + H5 = HKAS + + HB = HKAS + NB + NBT + HW = Dict_inv['HKI'] + NW + + HGEM = (0.5*HA+H1 + H2 + H3 + H4 + H5 + H6 + H7 + H8 + H9+0.5*HB) / 10 + + QAA = QA[J] + QAT + QBB = QB[J] + QBT + + # Constants + DTT = DTG / 10 + + # Calling the inter function for water levels at the lock side + G1 = np.interp(T - 1 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G2 = np.interp(T - 2 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G3 = np.interp(T - 3 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G4 = np.interp(T - 4 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G5 = np.interp(T - 5 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G6 = np.interp(T - 6 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G7 = np.interp(T - 7 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G8 = np.interp(T - 8 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G9 = np.interp(T - 9 * DTT,Dict_inv['T1'], Dict_inv['N1']) + + # Calculating the average water level in kolk + GGEM = Dict_inv['HKI'] + (0.5 * NV + G1 + G2 + G3 + G4 + G5 + G6 + G7 + G8 + G9 + 0.5 * NW) / 10 + + # Water level at the kas side of the door + HKAS = HKAS - (Dict_inv['MU'] * Tot_A * np.sign(HGEM - GGEM) * + np.sqrt(2 * G * abs(HGEM - GGEM)) / (Dict_inv['BKAS'] * Dict_inv['LKAS'])) * Dict_inv['DT'] + + dH = GGEM-HGEM + + #Toeschrijven uitvoer + L_NAT.append(NAT) + L_NBT.append(NBT) + L_T.append(T) + L_HKAS.append(HKAS) + L_HV.append(HV) + L_HA.append(HA) + L_H5.append(H5) + L_HB.append(HB) + L_HW.append(HW) + L_HGEM.append(HGEM) + L_GGEM.append(GGEM) + L_NV.append(NV) + L_dH.append(dH) + L_H1.append(H1) + L_H2.append(H2) + L_H3.append(H3) + L_H4.append(H4) + L_H6.append(H6) + L_H7.append(H7) + L_H8.append(H8) + L_H9.append(H9) + + J += 1 + T = round(T+Dict_inv['DT'],2) + + # Calculation up to end time + if T >= Dict_inv['TEND']: + break + +#%% +print(T) +print('NAT',NAT,'NBT',NBT,'NV',NV,'NW',NW,'NA',NA,'NB',NB) +plt.plot(L_T,L_HA,label='HA kas') +plt.plot(L_T,L_HB,label='HB kas') +plt.plot(L_T,L_HV,label='Spleet A kolk') +plt.plot(L_T,L_HW,label='Spleet B kolk') +plt.plot(L_T,L_H5,label='H5') +plt.legend() +#plt.xlim([-1,6]) +plt.figure() +plt.plot(L_T,L_HGEM,label='HGEM') +plt.plot(L_T,L_GGEM,label='GGEM') +plt.plot(L_T,L_HKAS,label='HKAS') +plt.plot(L_T,L_dH,label='Verval') +plt.plot(L_T,L_HW,label='WL Kolk spleet B') +plt.plot(L_T,L_HV,label='WL Kolk spleet A') +plt.legend() +#plt.xlim([-1,6]) + +plt.figure() +plt.plot(L_T,L_HV,label='Wl kolk tpv A') +plt.plot(L_T,L_H5,label='H midden deurkas') +plt.plot(L_T,L_HW,label='Wl kolk tpv B') +plt.ylim([-0.4,1.2]) +plt.grid() +plt.xticks([-6,0,6,12,18,24,30]) +plt.legend() + +plt.figure() +plt.plot(L_T,L_dH,label='Verval') +#plt.ylim([-0.4,0.2]) +plt.xlim([0,40]) +plt.grid() +plt.legend() +#plt.xticks([-6,0,6,12,18,24,30]) +#%% +plt.figure() +plt.plot(L_T,L_HA,label='WL Kas zijde A') +plt.plot(L_T,L_HV,label='WL kolk zijde A') +plt.plot(L_T,L_HB,label='WL kaszijde B') +plt.plot(L_T,L_H2) +#plt.plot(L_T,L_H3) +#plt.plot(L_T,L_H4) +#plt.plot(L_T,L_H5) +#plt.plot(L_T,L_H6) +#plt.plot(L_T,L_H7) +#plt.plot(L_T,L_H8) +plt.plot(L_T,L_H9) +plt.legend() + +#%% Read fortran uitvoer +column_names = ['T','HV','HA','H5','HB','HW','HGEM','GGEM','GGEM-HGEM'] +dt_1 = pd.read_csv('Fort_uitv_1dt.out',names=column_names,index_col=False) +dt_10 = pd.read_csv('Fort_uitv_10dt.out',names=column_names,index_col=False) + +plt.plot(dt_1["T"],dt_1["GGEM-HGEM"],label='Verval .FOR 1 dt') +#plt.plot(dt_10["T"],dt_10["GGEM-HGEM"],label='Verval .FOR 10 dt') +plt.plot(L_T,L_dH,label='Verval .py') +plt.legend() +#plt.ylim([-0.1,0.1]) +plt.xlim([0,30]) + +#Readthedocs fig +#%% Python output figure +plt.figure(figsize=(8, 4)) +column_names = ['T','HV','HA','H5','HB','HW','HGEM','GGEM','GGEM-HGEM'] +plt.plot(L_T,L_dH) +plt.legend() +plt.xlim([-6,30]) +plt.grid() +plt.xticks([-6,0,6,12,18,24,30]) +plt.ylabel('Verval [m]') +plt.xlabel('Tijd [s]') + +directory, file_name = os.path.split(in_file) +output_file = os.path.join(directory, os.path.splitext(file_name)[0] + '.png') + + +plt.savefig(f'{output_file}') + +#Uitvoer +# T = tijd [s] +# HV = waterstand kolkzijde voor spleet A [mNAP] +# HA = waterstand kaszijde voor spleet A [mNAP] +# H5 = waterstand kaszijde midden kas [mNAP] +# HB = waterstand kaszijde voor spleet B [mNAP] +# HW = waterstand kolkzijde voor spleet B [mNAP] +# HGEM = gemiddelde waterstand in kas ter plaatse van de deur [mNAP] +# GGEM = gemiddelde waterstand in kolk ter plaatse van de deur [mNAP] +# GGEM - HGEM = gemiddeld verval over de deur [m] + + +# =====EINDE======================================================= + + +#OPmerking 27-09-24 +#Het lijkt mij vreemd dat spleet B meegroeit met H5. Met name het moment dat de golf spleet B bereiekt is gek. Er lijkt iets fout in NB in de eerste loop (ook de tweede) +# %% diff --git a/src/lockgate/Schip/KASGOLF_v6_1_voor_vergelijk_sensitivity_analysis.py b/src/lockgate/Schip/KASGOLF_v6_1_voor_vergelijk_sensitivity_analysis.py new file mode 100644 index 0000000..6ec91fa --- /dev/null +++ b/src/lockgate/Schip/KASGOLF_v6_1_voor_vergelijk_sensitivity_analysis.py @@ -0,0 +1,479 @@ +# PROGRAM KASGOLF + +# Doordringen van golf van langsvarend schip in de deurkas +# Versie 1.00 +# Waterloopkundig Laboratorium Delft +# A. Vrijburcht, 7 september 1993 + +# =====DECLARATIES======================================== + +import numpy as np +import os +import tkinter as tk +from tkinter import filedialog +import math +import matplotlib.pyplot as plt +import pandas as pd + +file_opt = options = {} +options['filetypes'] = [('KASGOLF input files', '.in'), ('all files', '.*')] +options['title'] = 'Select KASGOLF input file' + +# Open file selection dialog +print('Selecting file...') +root = tk.Tk() +root.withdraw() # we don't want a full GUI, so keep the root window from appearing +root.attributes("-topmost", True) +in_file = tk.filedialog.askopenfilename(parent=root, initialdir=os.getcwd(), **file_opt) # show an "Open" dialog box and return the path to the selected file +if not in_file: + raise ValueError('No file selected.') +in_files = [] +in_files.append(in_file) +print('Files selected: %s' % ', '.join(map(str, in_files))) + +Inv_naam = in_file + +T1 = np.zeros(21) #Tijdstabel [s] +N1 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet A [m] +T2 = np.zeros(21) #Tijdtabel 2 (?) [s] +N2 = np.zeros(21) #golfhoogte kolkzijde ter plaatse van spleet ? [m] + +NV=NW=0 + +QA = []#np.zeros(1001) #? +QB = []#np.zeros(1001) #? +G = 9.81 #Gravitatieversnelling [m/s^2] + +# =====INVOER===================================================== + +#HKI = #initiele waterstand [mNAP] +#ZK = #niveau kolk- en deurkasbodem [mNAP] +#LKK = #engte deurkas kolkzijde [m] +#LKAS = #lengte deurkas kaszijde [m] +#BKAS = #breedte deurkas kaszijde [m] +#BA = #breedte verticale spleet A [m] +#BB = #breedte verticale spleet B [m] +#AO = # Oppervlakte deuropening incl. onderzijde deur [m^2] +#MU = #afvoercoeff. verticale spleten A en B [-] +#DT = #tijdstap [s] +#TINIT = #start tijd [s] +#TEND = #eind tijd [s] +#M0 = #keuze golf met translatiesnelheid (=0) of vaarsnelheid (=1) +#VS = #vaarsnelheid [m/s] +#NT1 = #aantal op te geven punten tabel (integer!) + +#Uitlezen invoer bestand +Dict_inv = {} + +#with open(os.path.join(os.getcwd(),Inv_naam), 'r') as file: +with open(Inv_naam, 'r') as file: + for line in file: + if '=' in line: + key, value = line.split('=') + key = key.strip() + value = value.strip() + if ',' in value: + value = list(map(float, value.split(','))) + else: + try: + value = float(value) + except ValueError: + value = int(value) + Dict_inv[key] = value + +uitvoer_set = pd.DataFrame() + +set_values = [0.0,1.0,2.0]#[1.0,0.5,2.0]#[0,1,2] +set_values2 = [1,0]#[1,0] +for i in range(0,1):#len(set_values)): + + #test1 + Dict_inv['VS'] = Dict_inv['VS'] #set_values[i]# + Dict_inv['M0'] = Dict_inv['M0']#set_values2[i]# + #test2 + Dict_inv['BKAS'] = Dict_inv['BKAS'] #set_values[i]# + #test3 + Dict_inv['BB'] = Dict_inv['BB'] #set_values[i]# + Dict_inv['BA'] = Dict_inv['BA'] #set_values[i]# + #Test4 + Dict_inv['AO'] =set_values[i]# Dict_inv['AO']# + #Test5 + Dict_inv['DT'] = Dict_inv['DT']#set_values[i]# + #Test6 + Dict_inv['T1'] = Dict_inv['T1']#set_values# + Dict_inv['N1'] = Dict_inv['N1']#set_values2# + + NV=NW=0 + + QA = []#np.zeros(1001) #? + QB = []#np.zeros(1001) #? + G = 9.81 #Gravitatieversnelling [m/s^2] + + # Lengte array voor golven + J = 0 + K = 0 + T = Dict_inv['TINIT'] + HKAS = Dict_inv['HKI'] + QAT = 0 #Debiet in punt A + QBT = 0 #Debiet in punt B + NA = 0 #Gegenereerde golfhoogte punt A + NB = 0 #Gegenereerde golfhoogte punt B + NAT = 0 #Golfhoogte in punt A + NBT = 0 #Golfhoogte in punt B + QA_dum = 0 #Iteratie debiet door spleet A + QB_dum = 0 #Iteratie debiet door spleet B + Tot_A = Dict_inv['AO']#Oppervlak spleet onder deur (spleet 3) + + # Length of array for waves + CK = np.sqrt(G * (Dict_inv['HKI'] - Dict_inv['ZK'])) #snelheid golf + if Dict_inv['M0'] == 0: + DTG = Dict_inv['LKK'] / CK #looptijd golf in kas bij golfsnelheid (M0 == 0) + else: + DTG = Dict_inv['LKK'] / Dict_inv['VS'] #looptijd golf in kas bij vaarsnelheid (M0 == 1) + + ## 02-01-2025: Sluizenboek paragraaf 11.4.4.1/2/3 bevatten theorie over het ontstaan van de boeggolf en waterspiegelverlaging langszij een in- en uitvarend schip bij een sluis. + ## Deze 'boeggolf' en 'waterspiegelverlaging langszij het schip' planten zich voort met de vaarsnelheid van het schip, ongeacht de propagation velocity op basis van shallow wave theory. Alleen als de boeggolf het schip 'loslaat' versnelt deze volgens shallow wave theory. + NKASR = Dict_inv['LKAS'] / CK / Dict_inv['DT'] #Aantal tijdstappen voor golf langs gehele kas + NKAS = int(round(NKASR)) + NK = int(round(NKAS / 10)) + N = int(1.1 * NKAS) + + # =====BEREKENING TRANSLATIEGOLVEN IN DEURKAS===================== + L_NA = [] + L_NB = [] + L_T = [] + L_HKAS = [] + L_HV = [] + L_HA = [] + L_H5 = [] + L_HB = [] + L_HW = [] + L_HGEM = [] + L_GGEM = [] + L_NV = [] + L_dH = [] + L_H1 = [] + L_H2 = [] + L_H3 = [] + L_H4 = [] + L_H6 = [] + L_H7 = [] + L_H8 = [] + L_H9 = [] + L_NBT = [] + L_NAT = [] + + ''' + #Loop in de tijd voordat de golf bij de kas is + while inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) == HKAS and inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) == HKAS: + L_T.append(T) + L_HKAS.append(HKAS) + L_HV.append(HKAS) + L_HA.append(HKAS) + L_H5.append(HKAS) + L_HB.append(HKAS) + L_HW.append(HKAS) + L_HGEM.append(HKAS) + L_GGEM.append(HKAS) + L_NV.append(NV) + L_dH.append(0) + + J += 1 + T = round(T+Dict_inv['DT'],2) + + Jst_golf = J + ''' + + #Deze while loop stopt als Teind is bereikt en begint pas als T de tijdstap van begin golf heeft bereikt + while True: + + #Berekenen waterstanden Spleet 1 (NV) en spleet 2 (NW) + #NV = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T) + #NW = inter(Dict_inv['NT1'],Dict_inv['T1'],Dict_inv['N1'],T-DTG) + NV = np.interp(T,Dict_inv['T1'],Dict_inv['N1']) + NW = np.interp(T-DTG,Dict_inv['T1'],Dict_inv['N1']) + + #Lengte van de golf array (vanaf het moment dat de golf langstrekt) + if J <= (N): + #Inkomend debiet via het kaskanaal + if J >= (NKAS): + QAT = QB[J-NKAS] + QBT = QA[J-NKAS] + + NAT = -QAT / (Dict_inv['BKAS']*CK) #Inkomende golfhoogte locatie A + NBT = QBT / (Dict_inv['BKAS']*CK) #Inkomende golfhoogte locatie B + + #De lengte array van de golf is al voorbij + else: + #print('T=',T,QBT, 'NBT=',NBT, 'NB=',NB, QB[len(QB)-1],QB_dum) + #if T == 12.90: + # break + QAT = QB[len(QB)-NKAS] #N-NKAS is 1 hele golflengte geleden (door ck komt debiet van B ten tijde van (N-NKAS) nu aan bij A) + QBT = QA[len(QA)-NKAS] + + #Inkomende golfhoogte door translatiegolf + NAT = -QAT / (Dict_inv['BKAS']*CK) + NBT = QBT / (Dict_inv['BKAS']*CK) + + + max_iterations = 10000 + tolerance = 0.001 + + NAO = 0 + NBO = 0 + + #if T == 6.44: + # break + #Itereren tot juist benadering golfhoogte + for P in range(0,max_iterations+1): + QAO = QA_dum + QBO = QB_dum + NAO = NA + NBO = NB + QB_update = (-Dict_inv['MU'] * Dict_inv['BB'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, NW - NB - NBT) * np.sqrt(2 * G * abs(NW - NB - NBT)) - QBT) + QA_update = (Dict_inv['MU'] * Dict_inv['BA'] * (Dict_inv['HKI'] - Dict_inv['ZK']) * + math.copysign(1, NV - NA - NAT) * np.sqrt(2 * G * abs(NV - NA - NAT)) - QAT) + + QA_dum = QA_update#0.1*QA_update + 0.9*QAO + QB_dum = QB_update#0.1*QB_update + 0.9*QBO + + NAN = QA_dum / (Dict_inv['BKAS']*CK) + NA = 0.9 * NAO + 0.1 * NAN + NBN = -QB_dum / (Dict_inv['BKAS']*CK) + NB = 0.9 * NBO + 0.1 * NBN + + #if abs(NB - NBO) <= tolerance and abs(QB_dum - QBO) <= tolerance and abs(NA - NAO) <= tolerance and abs(QA_dum - QAO) <= tolerance: + if (abs(NB - NBO) <= tolerance and abs(NA - NAO) <= tolerance): + #print('Doet het nu') + break + + else: + print(f'T:{T}; No value found') + + #if T == 4: + # break + + QA.append(QA_dum) + QB.append(QB_dum) + + HV = Dict_inv['HKI'] + NV #waterstand in de kolk + HA = HKAS + NA + NAT #waterstand bij spleet A. Waterstand KAS + + if J >= 9 * NK: + H1 = HKAS + (QA[J - NK] - QB[J - 9 * NK]) / (Dict_inv['BKAS'] * CK) + H9 = HKAS + (QA[J - 9 * NK] - QB[J - NK]) / (Dict_inv['BKAS'] * CK) + elif J >= NK: + H1 = HKAS + QA[J - NK] / (Dict_inv['BKAS'] * CK) + H9 = HKAS - QB[J - NK] / (Dict_inv['BKAS'] * CK) + else: + H1 = HKAS + H9 = HKAS + + if J >= 8 * NK: + H2 = HKAS + (QA[J - 2 * NK] - QB[J - 8 * NK]) / (Dict_inv['BKAS'] * CK) + H8 = HKAS + (QA[J - 8 * NK] - QB[J - 2 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 2 * NK: + H2 = HKAS + QA[J - 2 * NK] / (Dict_inv['BKAS'] * CK) + H8 = HKAS - QB[J - 2 * NK] / (Dict_inv['BKAS'] * CK) + else: + H2 = HKAS + H8 = HKAS + + if J >= 7 * NK: + H3 = HKAS + (QA[J - 3 * NK] - QB[J - 7 * NK]) / (Dict_inv['BKAS'] * CK) + H7 = HKAS + (QA[J - 7 * NK] - QB[J - 3 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 3 * NK: + H3 = HKAS + QA[J - 3 * NK] / (Dict_inv['BKAS'] * CK) + H7 = HKAS - QB[J - 3 * NK] / (Dict_inv['BKAS'] * CK) + else: + H3 = HKAS + H7 = HKAS + + if J >= 6 * NK: + H4 = HKAS + (QA[J - 4 * NK] - QB[J - 6 * NK]) / (Dict_inv['BKAS'] * CK) + H6 = HKAS + (QA[J - 6 * NK] - QB[J - 4 * NK]) / (Dict_inv['BKAS'] * CK) + elif J >= 4 * NK: + H4 = HKAS + QA[J - 4 * NK] / (Dict_inv['BKAS'] * CK) + H6 = HKAS - QB[J - 4 * NK] / (Dict_inv['BKAS'] * CK) + else: + H4 = HKAS + H6 = HKAS + + if J >= 5*NK: + H5 = HKAS + (QA[J - 5 * NK] - QB[J - 5 * NK]) / (Dict_inv['BKAS'] * CK) + else: + H5 = HKAS + + HB = HKAS + NB + NBT + HW = Dict_inv['HKI'] + NW + + HGEM = (0.5*HA+H1 + H2 + H3 + H4 + H5 + H6 + H7 + H8 + H9+0.5*HB) / 10 + + QAA = QA[J] + QAT + QBB = QB[J] + QBT + + # Constants + DTT = DTG / 10 + + # Calling the inter function for water levels at the lock side + G1 = np.interp(T - 1 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G2 = np.interp(T - 2 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G3 = np.interp(T - 3 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G4 = np.interp(T - 4 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G5 = np.interp(T - 5 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G6 = np.interp(T - 6 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G7 = np.interp(T - 7 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G8 = np.interp(T - 8 * DTT,Dict_inv['T1'], Dict_inv['N1']) + G9 = np.interp(T - 9 * DTT,Dict_inv['T1'], Dict_inv['N1']) + + # Calculating the average water level in kolk + GGEM = Dict_inv['HKI'] + (0.5 * NV + G1 + G2 + G3 + G4 + G5 + G6 + G7 + G8 + G9 + 0.5 * NW) / 10 + + # Water level at the kas side of the door + HKAS = HKAS - (Dict_inv['MU'] * Tot_A * np.sign(HGEM - GGEM) * + np.sqrt(2 * G * abs(HGEM - GGEM)) / (Dict_inv['BKAS'] * Dict_inv['LKAS'])) * Dict_inv['DT'] + + dH = GGEM-HGEM + + #Toeschrijven uitvoer + L_NA.append(NA) + L_NB.append(NB) + L_NAT.append(NAT) + L_NBT.append(NBT) + L_T.append(T) + L_HKAS.append(HKAS) + L_HV.append(HV) + L_HA.append(HA) + L_H5.append(H5) + L_HB.append(HB) + L_HW.append(HW) + L_HGEM.append(HGEM) + L_GGEM.append(GGEM) + L_NV.append(NV) + L_dH.append(dH) + L_H1.append(H1) + L_H2.append(H2) + L_H3.append(H3) + L_H4.append(H4) + L_H6.append(H6) + L_H7.append(H7) + L_H8.append(H8) + L_H9.append(H9) + + J += 1 + T = round(T+Dict_inv['DT'],2) + + # Calculation up to end time + if T >= Dict_inv['TEND']: + column_name = f"Column{i + 1}" + uitvoer_set[column_name] = L_dH + break + +'''#%% + +print(T) +print('NAT',NAT,'NBT',NBT,'NV',NV,'NW',NW,'NA',NA,'NB',NB) +plt.plot(L_T,L_HA,label='HA kas') +plt.plot(L_T,L_HB,label='HB kas') +plt.plot(L_T,L_HV,label='Spleet A kolk') +plt.plot(L_T,L_HW,label='Spleet B kolk') +plt.plot(L_T,L_H5,label='H5') +plt.legend() +#plt.xlim([-1,6]) +plt.figure() +plt.plot(L_T,L_HGEM,label='HGEM') +plt.plot(L_T,L_GGEM,label='GGEM') +plt.plot(L_T,L_HKAS,label='HKAS') +plt.plot(L_T,L_dH,label='Verval') +plt.plot(L_T,L_HW,label='WL Kolk spleet B') +plt.plot(L_T,L_HV,label='WL Kolk spleet A') +plt.legend() +#plt.xlim([-1,6]) + +plt.figure() +plt.plot(L_T,L_HV,label='Wl kolk tpv A') +plt.plot(L_T,L_H5,label='H midden deurkas') +plt.plot(L_T,L_HW,label='Wl kolk tpv B') +plt.ylim([-0.4,1.2]) +plt.grid() +plt.xticks([-6,0,6,12,18,24,30]) +plt.legend() + +plt.figure() +plt.plot(L_T,L_dH,label='Verval') +#plt.ylim([-0.4,0.2]) +plt.xlim([0,40]) +plt.grid() +plt.legend() +#plt.xticks([-6,0,6,12,18,24,30]) +''' +'''#%% +plt.figure() +plt.plot(L_T,L_HA,label='WL Kas zijde A') +plt.plot(L_T,L_HV,label='WL kolk zijde A') +plt.plot(L_T,L_HB,label='WL kaszijde B') +plt.plot(L_T,L_H2) +#plt.plot(L_T,L_H3) +#plt.plot(L_T,L_H4) +#plt.plot(L_T,L_H5) +#plt.plot(L_T,L_H6) +#plt.plot(L_T,L_H7) +#plt.plot(L_T,L_H8) +plt.plot(L_T,L_H9) +plt.legend() + +# Read fortran uitvoer +column_names = ['T','HV','HA','H5','HB','HW','HGEM','GGEM','GGEM-HGEM'] +dt_1 = pd.read_csv('Fort_uitv_1dt.out',names=column_names,index_col=False) +dt_10 = pd.read_csv('Fort_uitv_10dt.out',names=column_names,index_col=False) + +plt.plot(dt_1["T"],dt_1["GGEM-HGEM"],label='Verval .FOR 1 dt') +#plt.plot(dt_10["T"],dt_10["GGEM-HGEM"],label='Verval .FOR 10 dt') +plt.plot(L_T,L_dH,label='Verval .py') +plt.legend() +#plt.ylim([-0.1,0.1]) +plt.xlim([0,30]) + +'''#Readthedocs fig +#%% Python output figure +plt.figure(figsize=(8, 4)) +plt.plot(L_T,uitvoer_set) +plt.legend(['Smooth wave'])#['AO=0.0 [m2]','AO=1.0 [m2]','AO=2.0 [m2]'])#['BA=0.05 [m]','BA=0.30 [m]','BA=0.70 [m]'])#['BKAS=1.0 [m]','BKAS=0.5 [m]','BKAS=2.0 [m]'])#['M0=1 with VS=1.40 [m/s]','M0=0'])#,'DT=0.01 [s]','DT=0.10 [s]'],loc='upper left') +plt.xlim([-6,30]) +plt.grid() +plt.xticks([-6,0,6,12,18,24,30]) +plt.ylabel('Head difference [m]') +plt.xlabel('Time [s]') + +directory, file_name = os.path.split(in_file) +output_file = os.path.join(directory, os.path.splitext(file_name)[0] + '.png') + +plt.savefig(f'{output_file}') + +#Plot instant en smooth wave +#plt.plot([-5,0,0.02,30],[0,0,-0.35,-0.35]) +#plt.plot(set_values,set_values2) +#plt.xlim([-1,6]) +#plt.legend(['Instant wave','Smooth wave']) +#plt.xlabel('Time [s]') +#plt.ylabel('Waterlevel [mNAP]') + +#Uitvoer +# T = tijd [s] +# HV = waterstand kolkzijde voor spleet A [mNAP] +# HA = waterstand kaszijde voor spleet A [mNAP] +# H5 = waterstand kaszijde midden kas [mNAP] +# HB = waterstand kaszijde voor spleet B [mNAP] +# HW = waterstand kolkzijde voor spleet B [mNAP] +# HGEM = gemiddelde waterstand in kas ter plaatse van de deur [mNAP] +# GGEM = gemiddelde waterstand in kolk ter plaatse van de deur [mNAP] +# GGEM - HGEM = gemiddeld verval over de deur [m] + + +# =====EINDE======================================================= + + +#OPmerking 27-09-24 +#Het lijkt mij vreemd dat spleet B meegroeit met H5. Met name het moment dat de golf spleet B bereiekt is gek. Er lijkt iets fout in NB in de eerste loop (ook de tweede) +# %% diff --git a/src/lockgate/Schip/KOOM1.FOR b/src/lockgate/Schip/KOOM1.FOR new file mode 100644 index 0000000..c4c79be --- /dev/null +++ b/src/lockgate/Schip/KOOM1.FOR @@ -0,0 +1,53 @@ + PROGRAM KOOM1 + +C - INVAREN SLUIS +C - Schematische berekening van max. golfhoogten in sluiskolk tijdens +C invaart volgens Kooman +C - Versie 1.00 +C - Waterloopkundig Laboratorium Delft +C - A. Vrijburcht, 13 september 1993 + + + integer i, j + real hk, bk + real bs, ds, vs + real g + real Ak, As + real dhk, dvs + real alfa1, alf1 + + + open (1,file=' ') + read (1,*) hk, bk + read (1,*) bs, ds, vs + close (1) + + open (2,file=' ') + + g = 9.81 + As = bs*ds + dhk = (hk-ds)/22 + dvs = vs/22 + + do 500 i = 1,20 + hk = hk - dhk + Ak = bk*hk + vs = 0. + + do 400 j = 1,20 + vs = vs + dvs + + alf1 = .7*vs**2/(g*hk)*(As/Ak)/(1-(As/Ak))*hk + alfa1 = alf1*bk*sqrt(g*hk)/(vs*As) + + write (2,252) vs/sqrt(g*hk), As/Ak, alfa1 + + 400 continue + + 500 continue + + 252 format (3(F7.4,',')) + + close (2) + end + diff --git a/src/lockgate/Schip/SCHYF.FOR b/src/lockgate/Schip/SCHYF.FOR new file mode 100644 index 0000000..d4fa63b --- /dev/null +++ b/src/lockgate/Schip/SCHYF.FOR @@ -0,0 +1,125 @@ + PROGRAM SCHYF + +C - VAREN IN KANAAL +C - Berekening grenssnelheid, inzinking en retourstroomsnelheid in +C prismatisch kanaal +C - Versie 1.00 +C - Waterloopkundig Laboratorium Delft +C - A. Vrijburcht, 10 september 1993 + + +C.....DECLARATIES...................................... + + integer i, j + + real hv, bv, dhv + real bs, ds, vs + real alfa + real rho, g + real Av, As + real c0, c1, c2, c3, c4, c5 + real y1, p1, vg, vgd + real u1, u5, u + real x1, x5, x + real zv, zvd, ud + real dvg, vsd + + +C.....INVOER............................................. + + open (1,file=' ') + read (1,*) hv, bv + read (1,*) ds, bs + read (1,*) alfa + close (1) + + open (2,file=' ') + open (3,file=' ') + + +C.....VASTE WAARDEN..................................... + g = 9.81 + As = bs*ds + + +c.....LUS VOOR WATERDIEPTE + dhv = (hv-ds)/21 + do 300 i = 1,20 + hv = hv - dhv + Av = bv*hv + + +C.....GRENSBEREKENING.................................... + +c.....startwaarde + y1 =.6*(1-As/Av)**2*sqrt(g*hv) + + 100 continue + c0 = ((alfa-1)*y1**3 + 2*g*As/bv*y1) / alfa + c1 = ((3*alfa-1)*y1**2 - 2*g*(Av-As)/bv) / alfa + c2 = 3*y1 + c3 = (3*alfa-1)*y1**2 - 2*g*(Av-As)/bv + c4 = 6*y1 + c5 = 3*alfa + u = (-c4 + sqrt(c4**2-4*c3*c5)) / (2*c5) + p1 = u**3 + c2*u**2 + c1*u + c0 + if (abs(p1) .lt. .5) then + vg = y1 + vgd = vg/sqrt(g*hv) + else + y1 = y1 + .001 + goto 100 + endif + write (2,210) As/Av, vgd, ds/hv + + +C.....SCHIJFBEREKENING................................... + +C.....LUS VOOR VAARSNELHEID + vs = .0 + dvg = vg/41 + do 200 j = 1,40 + vs = vs + dvg + + c0 = ((alfa-1)*vs**3 + 2*g*As/bv*vs) / alfa + c1 = ((3*alfa-1)*vs**2 - 2*g*(Av-As)/bv) / alfa + c2 = 3*vs + u1 = -1.5*c0/c1 + x1 = u1**3+c2*u1**2+c1*u1+c0 + u5 = -c0/c1 + x5 = u5**3+c2*u5**2+c1*u5+c0 + if ((x1*x5) .lt. 0) then + goto 205 + else + stop + endif + 205 continue + u = (u1*x5-u5*x1)/(x5-x1) + x = u**3+c2*u**2+c1*u+c0 + if ((x*x5) .lt. 0) then + u1 = u + x1 = x + else + u5 = u + x5 = x + endif + if (abs(x) .ge. .00001) goto 205 + + vsd = vs/sqrt(g*hv) + ud = u/sqrt(g*hv) + zv = (alfa*(vs+u)**2-vs**2)/(2*g) + zvd = zv/hv + write (3,211) vsd, As/Av, zvd, ud + + 210 format (3(F7.4,',')) + 211 format (4(F7.4,',')) + + 200 continue + + 300 continue + + close (2) + close (3) + + END + diff --git a/src/lockgate/Schip/SCHYFZ.FOR b/src/lockgate/Schip/SCHYFZ.FOR new file mode 100644 index 0000000..1308155 --- /dev/null +++ b/src/lockgate/Schip/SCHYFZ.FOR @@ -0,0 +1,127 @@ + PROGRAM SCHYFZ + +C - VAREN IN KANAAL +C - Berekening grenssnelheid, inzinking en retourstroomsnelheid in +C prismatisch kanaal +C - Let op: Nu met schip dat inzinking heeft gelijk aan halve +C waterspiegelverlaging !!!!!!! +C - Versie 1.00 +C - Waterloopkundig Laboratorium Delft +C - A. Vrijburcht, 24 september 1993 + + +C.....DECLARATIES...................................... + + integer i, j + + real hv, bv, dhv + real bs, ds, vs + real alfa + real rho, g + real Av, As + real c0, c1, c2, c3, c4, c5 + real y1, p1, vg, vgd + real u1, u5, u + real x1, x5, x + real zv, zvd, ud + real dvg, vsd + + +C.....INVOER............................................. + + open (1,file=' ') + read (1,*) hv, bv + read (1,*) ds, bs + read (1,*) alfa + close (1) + + open (2,file=' ') + open (3,file=' ') + + +C.....VASTE WAARDEN..................................... + g = 9.81 + As = bs*ds + + +c.....LUS VOOR WATERDIEPTE + dhv = (hv-ds)/21 + do 300 i = 1,20 + hv = hv - dhv + Av = bv*hv + + +C.....GRENSBEREKENING.................................... + +c.....startwaarde + y1 =.6*(1-As/Av)**2*sqrt(g*hv) + + 100 continue + c0 = ((alfa-1)*y1**3 + 2*g*As/bv*y1) / alfa + c1 = ((3*alfa-1)*y1**2 - 2*g*(Av-As)/bv) / alfa + c2 = 3*y1 + c3 = (3*alfa-1)*y1**2 - 2*g*(Av-As)/bv + c4 = 6*y1 + c5 = 3*alfa + u = (-c4 + sqrt(c4**2-4*c3*c5)) / (2*c5) + p1 = u**3 + c2*u**2 + c1*u + c0 + if (abs(p1) .lt. .5) then + vg = y1 + vgd = vg/sqrt(g*hv) + else + y1 = y1 + .001 + goto 100 + endif + write (2,210) As/Av, vgd, ds/hv + + +C.....SCHIJFBEREKENING................................... + +C.....LUS VOOR VAARSNELHEID + vs = .0 + dvg = vg/35 + do 200 j = 1,40 + vs = vs + dvg + + c0 = ((alfa-1)*vs**3 + 2*g*As/(bv-bs/2)*vs) / alfa + c1 = ((3*alfa-1)*vs**2 - 2*g*(Av-As)/(bv-bs/2)) / alfa + c2 = 3*vs + u1 = -1.5*c0/c1 + x1 = u1**3+c2*u1**2+c1*u1+c0 + u5 = -c0/c1 + x5 = u5**3+c2*u5**2+c1*u5+c0 + if ((x1*x5) .lt. 0) then + goto 205 + else + stop + endif + 205 continue + u = (u1*x5-u5*x1)/(x5-x1) + x = u**3+c2*u**2+c1*u+c0 + if ((x*x5) .lt. 0) then + u1 = u + x1 = x + else + u5 = u + x5 = x + endif + if (abs(x) .ge. .0001) goto 205 + + vsd = vs/sqrt(g*hv) + ud = u/sqrt(g*hv) + zv = (alfa*(vs+u)**2-vs**2)/(2*g) + zvd = zv/hv + write (3,211) vsd, As/Av, zvd, ud + + 210 format (3(F7.4,',')) + 211 format (4(F7.4,',')) + + 200 continue + + 300 continue + + close (2) + close (3) + + END + diff --git a/src/lockgate/Schip/Test_1.IN b/src/lockgate/Schip/Test_1.IN new file mode 100644 index 0000000..1c275df --- /dev/null +++ b/src/lockgate/Schip/Test_1.IN @@ -0,0 +1,58 @@ +**########################################################### +**Date : 20-11-2024 +**Filename : Inv_Test_run.in +**Lock : Example +** +**Input file for program KASGOLF version 1994. +**Calculation of wave driven hydraulic head over an opened lock gate. +** +**Remark : Lines starting with '**' are for comments. +**########################################################### + +**Initial water level in gate recess (in Dutch: 'deurkas') [mNAP] +HKI = 0.00 + +**Position of the lock bottom [mNAP] +ZK = -4.00 + +**Length of the lock gate at the side of the lock chamber [m] +LKK = 10.00 + +**Length of the lock gate at the side of the gate recess [m] +LKAS = 10.00 + +**Width of the channel (section) between the wall of the gate recess and lock gate [m] +BKAS = 1.00 + +**Width of the vertical opening between locations V and A [m] +BA = 0.05 + +**Width of the vertical opening between locations W and B [m] +BB = 0.50 + +**Area of the horizontal opening underneath the lock gate [m2] +AO = 0 + +**Friction coefficient for the discharge through both vertical openings at the sides and the horizontal opening underneath the gate [-] +MU = 0.70 + +**Time step [s] +DT = 0.02 + +**Start time of the simulation [s] +TINIT = -6.0 + +**End time of the simulation [s] +TEND = 30.00 + +**Choice for delay wave arrival between location V and W (translatory wave (0) or sailing velocity ship (1)) +M0 = 0 + +**Sailing velocity of a ship when M0=1 +VS = 6.27 + +**Time array for the wave +T1 = -20.00, 0.00, 0.02, 35.00, 35.01, 100.00 + +**Wave height array for the wave +N1 = 0.00, 0.00, -0.37, -0.37, -0.37, -0.37 \ No newline at end of file diff --git a/src/lockgate/Schip/Test_1.png b/src/lockgate/Schip/Test_1.png new file mode 100644 index 0000000..2e5b7fe Binary files /dev/null and b/src/lockgate/Schip/Test_1.png differ diff --git a/src/lockgate/Schip/Test_1_new.IN b/src/lockgate/Schip/Test_1_new.IN new file mode 100644 index 0000000..f3cde60 --- /dev/null +++ b/src/lockgate/Schip/Test_1_new.IN @@ -0,0 +1,58 @@ +**########################################################### +**Date : 20-11-2024 +**Filename : Inv_Test_run.in +**Lock : Example +** +**Input file for program KASGOLF version 1994. +**Calculation of wave driven hydraulic head over an opened lock gate. +** +**Remark : Lines starting with '**' are for comments. +**########################################################### + +**Initial water level in gate recess (in Dutch: 'deurkas') [mNAP] +HKI = 0.00 + +**Position of the lock bottom [mNAP] +ZK = -4.00 + +**Length of the lock gate at the side of the lock chamber [m] +LKK = 10.00 + +**Length of the lock gate at the side of the gate recess [m] +LKAS = 10.00 + +**Width of the channel (section) between the wall of the gate recess and lock gate [m] +BKAS = 1.00 + +**Width of the vertical opening between locations V and A [m] +BA = 0.05 + +**Width of the vertical opening between locations W and B [m] +BB = 0.50 + +**Area of the horizontal opening underneath the lock gate [m2] +AO = 0 + +**Friction coefficient for the discharge through both vertical openings at the sides and the horizontal opening underneath the gate [-] +MU = 0.70 + +**Time step [s] +DT = 0.02 + +**Start time of the simulation [s] +TINIT = -6.0 + +**End time of the simulation [s] +TEND = 30.00 + +**Choice for propagation velocity wave (translatory wave (0) or sailing velocity ship (1)) +M0 = 1 + +**Sailing velocity of a ship when M0=1 +VS = 1.40 + +**Time array for the wave +T1 = -20.00, 0.00, 0.02, 2.50, 3.50, 35.00, 100.00 + +**Wave height array for the wave +N1 = 0.00, 0.00, -0.37, -0.37, -0.37, -0.37, -0.37 \ No newline at end of file diff --git a/src/lockgate/Schip/Test_1_new.png b/src/lockgate/Schip/Test_1_new.png new file mode 100644 index 0000000..d825de1 Binary files /dev/null and b/src/lockgate/Schip/Test_1_new.png differ diff --git a/src/lockgate/Schip/Test_2.IN b/src/lockgate/Schip/Test_2.IN new file mode 100644 index 0000000..3248669 --- /dev/null +++ b/src/lockgate/Schip/Test_2.IN @@ -0,0 +1,58 @@ +**########################################################### +**Date : 20-11-2024 +**Filename : Inv_Test_run.in +**Lock : Example +** +**Input file for program KASGOLF version 1994. +**Calculation of wave driven hydraulic head over an opened lock gate. +** +**Remark : Lines starting with '**' are for comments. +**########################################################### + +**Initial water level in gate recess (in Dutch: 'deurkas') [mNAP] +HKI = 0.00 + +**Position of the lock bottom [mNAP] +ZK = -4.00 + +**Length of the lock gate at the side of the lock chamber [m] +LKK = 10.00 + +**Length of the lock gate at the side of the gate recess [m] +LKAS = 10.00 + +**Width of the channel (section) between the wall of the gate recess and lock gate [m] +BKAS = 1.00 + +**Width of the vertical opening between locations V and A [m] +BA = 0.05 + +**Width of the vertical opening between locations W and B [m] +BB = 0.50 + +**Area of the horizontal opening underneath the lock gate [m2] +AO = 0 + +**Friction coefficient for the discharge through both vertical openings at the sides and the horizontal opening underneath the gate [-] +MU = 0.70 + +**Time step [s] +DT = 0.02 + +**Start time of the simulation [s] +TINIT = -6.0 + +**End time of the simulation [s] +TEND = 30.00 + +**Choice for propagation velocity wave (translatory wave (0) or sailing velocity ship (1)) +M0 = 1 + +**Sailing velocity of a ship when M0=1 +VS = 1.40 + +**Time array for the wave +T1 = -20.00, 0.00, 0.02, 35.00, 35.01, 100.00 + +**Wave height array for the wave +N1 = 0.00, 0.00, -0.37, -0.37, -0.37, -0.37 \ No newline at end of file diff --git a/src/lockgate/Schip/Test_2.png b/src/lockgate/Schip/Test_2.png new file mode 100644 index 0000000..8346c3f Binary files /dev/null and b/src/lockgate/Schip/Test_2.png differ diff --git a/src/lockgate/Schip/Test_3.IN b/src/lockgate/Schip/Test_3.IN new file mode 100644 index 0000000..3248669 --- /dev/null +++ b/src/lockgate/Schip/Test_3.IN @@ -0,0 +1,58 @@ +**########################################################### +**Date : 20-11-2024 +**Filename : Inv_Test_run.in +**Lock : Example +** +**Input file for program KASGOLF version 1994. +**Calculation of wave driven hydraulic head over an opened lock gate. +** +**Remark : Lines starting with '**' are for comments. +**########################################################### + +**Initial water level in gate recess (in Dutch: 'deurkas') [mNAP] +HKI = 0.00 + +**Position of the lock bottom [mNAP] +ZK = -4.00 + +**Length of the lock gate at the side of the lock chamber [m] +LKK = 10.00 + +**Length of the lock gate at the side of the gate recess [m] +LKAS = 10.00 + +**Width of the channel (section) between the wall of the gate recess and lock gate [m] +BKAS = 1.00 + +**Width of the vertical opening between locations V and A [m] +BA = 0.05 + +**Width of the vertical opening between locations W and B [m] +BB = 0.50 + +**Area of the horizontal opening underneath the lock gate [m2] +AO = 0 + +**Friction coefficient for the discharge through both vertical openings at the sides and the horizontal opening underneath the gate [-] +MU = 0.70 + +**Time step [s] +DT = 0.02 + +**Start time of the simulation [s] +TINIT = -6.0 + +**End time of the simulation [s] +TEND = 30.00 + +**Choice for propagation velocity wave (translatory wave (0) or sailing velocity ship (1)) +M0 = 1 + +**Sailing velocity of a ship when M0=1 +VS = 1.40 + +**Time array for the wave +T1 = -20.00, 0.00, 0.02, 35.00, 35.01, 100.00 + +**Wave height array for the wave +N1 = 0.00, 0.00, -0.37, -0.37, -0.37, -0.37 \ No newline at end of file diff --git a/src/lockgate/Schip/Test_3.png b/src/lockgate/Schip/Test_3.png new file mode 100644 index 0000000..0f92e30 Binary files /dev/null and b/src/lockgate/Schip/Test_3.png differ diff --git a/src/lockgate/Schip/Test_4.IN b/src/lockgate/Schip/Test_4.IN new file mode 100644 index 0000000..3248669 --- /dev/null +++ b/src/lockgate/Schip/Test_4.IN @@ -0,0 +1,58 @@ +**########################################################### +**Date : 20-11-2024 +**Filename : Inv_Test_run.in +**Lock : Example +** +**Input file for program KASGOLF version 1994. +**Calculation of wave driven hydraulic head over an opened lock gate. +** +**Remark : Lines starting with '**' are for comments. +**########################################################### + +**Initial water level in gate recess (in Dutch: 'deurkas') [mNAP] +HKI = 0.00 + +**Position of the lock bottom [mNAP] +ZK = -4.00 + +**Length of the lock gate at the side of the lock chamber [m] +LKK = 10.00 + +**Length of the lock gate at the side of the gate recess [m] +LKAS = 10.00 + +**Width of the channel (section) between the wall of the gate recess and lock gate [m] +BKAS = 1.00 + +**Width of the vertical opening between locations V and A [m] +BA = 0.05 + +**Width of the vertical opening between locations W and B [m] +BB = 0.50 + +**Area of the horizontal opening underneath the lock gate [m2] +AO = 0 + +**Friction coefficient for the discharge through both vertical openings at the sides and the horizontal opening underneath the gate [-] +MU = 0.70 + +**Time step [s] +DT = 0.02 + +**Start time of the simulation [s] +TINIT = -6.0 + +**End time of the simulation [s] +TEND = 30.00 + +**Choice for propagation velocity wave (translatory wave (0) or sailing velocity ship (1)) +M0 = 1 + +**Sailing velocity of a ship when M0=1 +VS = 1.40 + +**Time array for the wave +T1 = -20.00, 0.00, 0.02, 35.00, 35.01, 100.00 + +**Wave height array for the wave +N1 = 0.00, 0.00, -0.37, -0.37, -0.37, -0.37 \ No newline at end of file diff --git a/src/lockgate/Schip/Test_4.png b/src/lockgate/Schip/Test_4.png new file mode 100644 index 0000000..8404946 Binary files /dev/null and b/src/lockgate/Schip/Test_4.png differ diff --git a/src/lockgate/Schip/Test_5.IN b/src/lockgate/Schip/Test_5.IN new file mode 100644 index 0000000..8d3b323 --- /dev/null +++ b/src/lockgate/Schip/Test_5.IN @@ -0,0 +1,58 @@ +**########################################################### +**Date : 20-11-2024 +**Filename : Inv_Test_run.in +**Lock : Example +** +**Input file for program KASGOLF version 1994. +**Calculation of wave driven hydraulic head over an opened lock gate. +** +**Remark : Lines starting with '**' are for comments. +**########################################################### + +**Initial water level in gate recess (in Dutch: 'deurkas') [mNAP] +HKI = 0.00 + +**Position of the lock bottom [mNAP] +ZK = -4.00 + +**Length of the lock gate at the side of the lock chamber [m] +LKK = 10.00 + +**Length of the lock gate at the side of the gate recess [m] +LKAS = 10.00 + +**Width of the channel (section) between the wall of the gate recess and lock gate [m] +BKAS = 1.00 + +**Width of the vertical opening between locations V and A [m] +BA = 0.05 + +**Width of the vertical opening between locations W and B [m] +BB = 0.50 + +**Area of the horizontal opening underneath the lock gate [m2] +AO = 0 + +**Friction coefficient for the discharge through both vertical openings at the sides and the horizontal opening underneath the gate [-] +MU = 0.70 + +**Time step [s] +DT = 0.02 + +**Start time of the simulation [s] +TINIT = -6.0 + +**End time of the simulation [s] +TEND = 30.00 + +**Choice for propagation velocity wave (translatory wave (0) or sailing velocity ship (1)) +M0 = 0 + +**Sailing velocity of a ship when M0=1 +VS = 1.40 + +**Time array for the wave +T1 = -20.00, 0.00, 0.02, 35.00, 35.01, 100.00 + +**Wave height array for the wave +N1 = 0.00, 0.00, -0.37, -0.37, -0.37, -0.37 \ No newline at end of file diff --git a/src/lockgate/Schip/Test_5.png b/src/lockgate/Schip/Test_5.png new file mode 100644 index 0000000..f368e91 Binary files /dev/null and b/src/lockgate/Schip/Test_5.png differ diff --git a/src/lockgate/Schip/Test_5_1.png b/src/lockgate/Schip/Test_5_1.png new file mode 100644 index 0000000..5b5a2ac Binary files /dev/null and b/src/lockgate/Schip/Test_5_1.png differ diff --git a/src/lockgate/Schip/Test_5_2.png b/src/lockgate/Schip/Test_5_2.png new file mode 100644 index 0000000..5b5fada Binary files /dev/null and b/src/lockgate/Schip/Test_5_2.png differ diff --git a/src/lockgate/Schip/Test_6.IN b/src/lockgate/Schip/Test_6.IN new file mode 100644 index 0000000..51b66b2 --- /dev/null +++ b/src/lockgate/Schip/Test_6.IN @@ -0,0 +1,58 @@ +**########################################################### +**Date : 20-11-2024 +**Filename : Inv_Test_run.in +**Lock : Example +** +**Input file for program KASGOLF version 1994. +**Calculation of wave driven hydraulic head over an opened lock gate. +** +**Remark : Lines starting with '**' are for comments. +**########################################################### + +**Initial water level in gate recess (in Dutch: 'deurkas') [mNAP] +HKI = 0.00 + +**Position of the lock bottom [mNAP] +ZK = -4.00 + +**Length of the lock gate at the side of the lock chamber [m] +LKK = 10.00 + +**Length of the lock gate at the side of the gate recess [m] +LKAS = 10.00 + +**Width of the channel (section) between the wall of the gate recess and lock gate [m] +BKAS = 1.00 + +**Width of the vertical opening between locations V and A [m] +BA = 0.05 + +**Width of the vertical opening between locations W and B [m] +BB = 0.50 + +**Area of the horizontal opening underneath the lock gate [m2] +AO = 0 + +**Friction coefficient for the discharge through both vertical openings at the sides and the horizontal opening underneath the gate [-] +MU = 0.70 + +**Time step [s] +DT = 0.02 + +**Start time of the simulation [s] +TINIT = -6.0 + +**End time of the simulation [s] +TEND = 30.00 + +**Choice for propagation velocity wave (translatory wave (0) or sailing velocity ship (1)) +M0 = 1 + +**Sailing velocity of a ship when M0=1 +VS = 1.40 + +**Time array for the wave +T1 = -20.00, 0.00, 0.50, 1.00, 1.50, 35.00, 100.00 + +**Wave height array for the wave +N1 = 0.00, 0.00, -0.06, -0.31, -0.37, -0.37, -0.37 \ No newline at end of file diff --git a/src/lockgate/Schip/Test_6.png b/src/lockgate/Schip/Test_6.png new file mode 100644 index 0000000..7f40f22 Binary files /dev/null and b/src/lockgate/Schip/Test_6.png differ diff --git a/src/lockgate/Schip/Test_6_golf.png b/src/lockgate/Schip/Test_6_golf.png new file mode 100644 index 0000000..e8d0216 Binary files /dev/null and b/src/lockgate/Schip/Test_6_golf.png differ diff --git a/src/lockgate/Schip/Test_invoer.IN b/src/lockgate/Schip/Test_invoer.IN new file mode 100644 index 0000000..c8ef99b --- /dev/null +++ b/src/lockgate/Schip/Test_invoer.IN @@ -0,0 +1,16 @@ +HKI = 0.00 +ZK = -4.00 +LKK = 10.00 +LKAS = 10.00 +BKAS = 1.00 +BA = 0.05 +BB = 0.50 +AO = 0 +MU = 0.70 +DT = 0.02 +TINIT = -6.0 +TEND = 30.00 +M0 = 0 +VS = 0.00 +T1 = -6, 0, 0.02, 3, 6, 9, 12, 15, 18 +N1 = 0.0, 0.0, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6 diff --git a/src/lockgate/Schip/Test_invoer.png b/src/lockgate/Schip/Test_invoer.png new file mode 100644 index 0000000..1df65a4 Binary files /dev/null and b/src/lockgate/Schip/Test_invoer.png differ diff --git a/src/lockgate/Schip/Test_invoer_Sluisboek.IN b/src/lockgate/Schip/Test_invoer_Sluisboek.IN new file mode 100644 index 0000000..32edf98 --- /dev/null +++ b/src/lockgate/Schip/Test_invoer_Sluisboek.IN @@ -0,0 +1,17 @@ +HKI = 0.00 +ZK = -4.00 +LKK = 14.00 +LKAS = 14.00 +BKAS = 1.00 +BA = 0.05 +BB = 0.50 +AO = 0 +MU = 0.70 +DT = 0.02 +TINIT = -6.0 +TEND = 60.00 +M0 = 0 +VS = 0.00 +NT1 = 14 +T1 = -0.04,-0.02,0, 0.02,3, 6, 9, 12, 15, 18, 21, 24, 34.98,35 +N1 = 0.0, 0.0, 0.0,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6, -0.6,0 diff --git a/src/lockgate/Schip/Test_invoer_Sluisboek.txt b/src/lockgate/Schip/Test_invoer_Sluisboek.txt new file mode 100644 index 0000000..c4ff908 --- /dev/null +++ b/src/lockgate/Schip/Test_invoer_Sluisboek.txt @@ -0,0 +1,17 @@ +HKI = 0.00 +ZK = -4.00 +LKK = 14.00 +LKAS = 14.00 +BKAS = 1.00 +BA = 0.05 +BB = 0.50 +AO = 0 +MU = 0.70 +DT = 0.02 +TINIT = -6.0 +TEND = 60.00 +M0 = 0 +VS = 0.00 +NT1 = 8 +T1 = -0.04,-0.02,0, 0.02,3, 6, 9, 12, 15, 18, 21, 24, 35,60 +N1 = 0.0, 0.0, 0.0,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6,-0.6, 0,0 diff --git a/src/lockgate/Schip/Test_invoer_smooth.IN b/src/lockgate/Schip/Test_invoer_smooth.IN new file mode 100644 index 0000000..03aed33 --- /dev/null +++ b/src/lockgate/Schip/Test_invoer_smooth.IN @@ -0,0 +1,17 @@ +HKI = 0.00 +ZK = -6.00 +LKK = 14.00 +LKAS = 14.00 +BKAS = 1.00 +BA = 0.05 +BB = 0.50 +AO = 0 +MU = 0.70 +DT = 0.02 +TINIT = -6.0 +TEND = 40.00 +M0 = 0 +VS = 0.00 +NT1 = 12 +T1 = -6, 0, 2, 3, 6, 9, 12, 15, 18, 20, 22, 30 +N1 = 0.0, 0.0,0.6,0.6,0.6,0.6,0.6, 0.6, 0.6, 0.6, 0.0, 0 diff --git a/src/lockgate/Schip/Test_invoer_voorbeeld.IN b/src/lockgate/Schip/Test_invoer_voorbeeld.IN new file mode 100644 index 0000000..b059333 --- /dev/null +++ b/src/lockgate/Schip/Test_invoer_voorbeeld.IN @@ -0,0 +1,17 @@ +HKI = 0.00 +ZK = -6.00 +LKK = 14.00 +LKAS = 14.00 +BKAS = 1.00 +BA = 0.05 +BB = 0.50 +AO = 0 +MU = 0.70 +DT = 0.02 +TINIT = -6.0 +TEND = 40.00 +M0 = 0 +VS = 0.00 +NT1 = 9 +T1 = -6, 0, 0.02, 3, 6, 9, 12, 15, 18 +N1 = 0.0, 0.0,0.6,0.6,0.6,0.6,0.6, 0.6, 0.6 diff --git a/src/lockgate/Schip/VB1.IN b/src/lockgate/Schip/VB1.IN new file mode 100644 index 0000000..c84ceea --- /dev/null +++ b/src/lockgate/Schip/VB1.IN @@ -0,0 +1,13 @@ + 0.00 -4.00 +10.00 +10.00 1.00 .05 .50 0.00 0.70 + 0.02 -6.00 30.00 + 1 1.40 + 6 +-20.00 0.00 + 0.00 0.00 + 0.01 -0.37 + 35.00 -0.37 + 35.01 -0.37 +100.00 -0.37 +sprong, geometrie 1.00, .05, .50, .00 diff --git a/src/lockgate/lockgate2/HEF1.py b/src/lockgate/lgate2/HEF1.py similarity index 100% rename from src/lockgate/lockgate2/HEF1.py rename to src/lockgate/lgate2/HEF1.py diff --git a/src/lockgate/lockgate2/INTER.py b/src/lockgate/lgate2/INTER.py similarity index 100% rename from src/lockgate/lockgate2/INTER.py rename to src/lockgate/lgate2/INTER.py diff --git a/src/lockgate/lockgate2/LGATE2.py b/src/lockgate/lgate2/LGATE2.py similarity index 100% rename from src/lockgate/lockgate2/LGATE2.py rename to src/lockgate/lgate2/LGATE2.py diff --git a/src/lockgate/lockgate3/LGATE3.py b/src/lockgate/lgate3/LGATE3.py similarity index 100% rename from src/lockgate/lockgate3/LGATE3.py rename to src/lockgate/lgate3/LGATE3.py diff --git a/src/lockgate/lgate5/HYM1.py b/src/lockgate/lgate5/HYM1.py new file mode 100644 index 0000000..73c4e43 --- /dev/null +++ b/src/lockgate/lgate5/HYM1.py @@ -0,0 +1,144 @@ +# Program HYM1 +# Toegevoegde watermassa +# Horizontaal translerende, vertical strip loodrecht op bodem +# aan een zijde water en water erboven + +#In HYM1 zijn andere subroutines gebruikt dan zoals gedefineerd in HYMTR. Desondanks doen ze hetzelfde, hieronder zijn ze uitgewerkt: +# PROC1 = VELD (in het midden) +# PROC2 = PP5 (grenzend aan twee lucht/watervlakken) +# PROC3 = P2 (bovenin, grenzend aan 1 zijde lucht en 1 symmetrie zijde) +# PROC4 = Q2 (linkerpunt boven schuif) +# PROC5 = QV6 (linksonder, links deur en onder muur (Vn=0)) +# PROC6 = V3 (muur beneden) +# PROC7 = PV7 (muur beneden en symmetrie rechts) +# PROC8 = P4 (Line of assymetrie rechts) +# PROC9 = PP8 (Hoekpunt rechtsboven) +# PROC10 = P1 (free surface boven/line of assymetrie) + +# Laad packages in +import numpy as np +import HYMS +import importlib +importlib.reload(HYMS) +from HYMS import * +import matplotlib.pyplot as plt + +#----------------------------------------------------------------------------- +# Invoer +#----------------------------------------------------------------------------- +s = 12 #Breedte van de sluisdeur (of #nummer strips op de deur) +w = 20 #Coordinaat van de bovenrand water +h = 10 #Afstand muur deurkas tot aan sluisdeur +uo = 1. #Snelheid van de translerende sluis deur +dl = 1. #stapje in lengte langzij deurlengte +rl = 1.5 #Relaxation factor +epsn = .025 #Nauwkeurigheidsmarge (97.5%) +V = 0.01 + +#----------------------------------------------------------------------------- +# Rekenen +#----------------------------------------------------------------------------- + +# initialiseren +q = np.zeros(101) #Wordt de debiet array +p = np.zeros((101, 101))#Wordt de pressure array per tak/strip? +alfa = np.zeros(101) #wordt de array van ratio (potential / velocity vector) langs de lengte van de sluisdeur +phi = np.zeros(101) + +#SUBROUTINE VOL1 +def VOL1(z,s,uo,dl,q,p,V,alfa): + for z in range (0,s+1): + phi[z] = p[0,z] + 0.2*q[z] + alfa[z] = phi[z]/uo + V = 0 + for z in range (0, s+1): + V = V + alfa[z]*dl + + return V, alfa + +j = 0 + +# Bron debieten +for i in range(0, s+1): + q[i] = uo * dl + +while True: + Vo = V + j += 1 + ########################################################### + #### Onderrand #### + z = 0 + x = 0 + # bron linksonder + HYMS.QV6(x,z,rl,p,q) + #onderrand + for x in range(1, h): + HYMS.V3(x, z, rl, p) + #rechtsonder + x = h + HYMS.PV7(x,z,rl,p) + + ########################################################### + #### Ter hoogte van bronnen (oftwel rand sluisdeur) #### + for z in range(1, s+1): + #bron + x = 0 + HYMS.Q2(x,z,rl,p,q) + #rechts van de bron + for x in range(1, h): + HYMS.VELD(x,z,rl,p) + #uiterst rechts van bronnen + x = h + HYMS.P4(x,z,rl,p) + + ########################################################### + #### Ter hoogte boven bronnen (oftwel boven rand sluisdeur) #### + for z in range(s+1, w): + #linkerrand boven de bronnen + x = 0 + HYMS.P2(x,z,rl,p) + #rechts boven bronnen + for x in range (1,h): + HYMS.VELD(x,z,rl,p) + #uiterst rechts boven bronnen + x = h + HYMS.P4(x,z,rl,p) + + ########################################################### + #### Ter hoogte van bovenrand #### + z = w + x = 0 + for x in range(1, h): + HYMS.P1(x,z,rl,p) + x = h + HYMS.PP8(x,z,rl,p) + + #Volume + V, alfa = VOL1(z,s,uo,dl,q,p,V,alfa) + Vd = V / ((s*dl)**2) + + # Check for convergence + eps = (V - Vo) / (V / j) + print(j, V, Vd) + + if eps <= epsn: + break + +# Output alfa !!!(IK denk rotatiesnelheid / versnelling?) +#for x in range(1, s): +# print(alfa[x]) + +plt.plot(alfa) +plt.title('alfa') +plt.ylabel('Ratio') +plt.xlim([0,w]) +plt.xlabel('z-dir') + +plt.figure() +plt.imshow(p.transpose(), cmap='bwr', origin='lower',vmin=-8,vmax=8) +plt.title('Element overview of potential flow field') +plt.xlabel('x-dir') +plt.ylabel('z-dir') +plt.xlim([0,h]) +plt.ylim([0,w]) +plt.colorbar(label='Ratio') \ No newline at end of file diff --git a/src/lockgate/lgate5/HYM2.py b/src/lockgate/lgate5/HYM2.py new file mode 100644 index 0000000..3ca0172 --- /dev/null +++ b/src/lockgate/lgate5/HYM2.py @@ -0,0 +1,128 @@ +# Program HYM1 +# Toegevoegde watermassa +# Om bodem roterende, verticale strip loodrecht op bodem +# aan een zijde water en water erboven + +#In HYM1 zijn andere subroutines gebruikt dan zoals gedefineerd in HYMTR. Desondanks doen ze hetzelfde, hieronder zijn ze uitgewerkt: +# PROC1 = VELD (in het midden) +# PROC2 = PP5 (grenzend aan twee lucht/watervlakken) +# PROC3 = P2 (bovenin, grenzend aan 1 zijde lucht en 1 symmetrie zijde) +# PROC4 = Q2 (linkerpunt boven schuif) +# PROC5 = QV6 (linksonder, links deur en onder muur (Vn=0)) +# PROC6 = V3 (muur beneden) +# PROC7 = PV7 (muur beneden en symmetrie rechts) +# PROC8 = P4 (Line of assymetrie rechts) +# PROC9 = PP8 (Hoekpunt rechtsboven) +# PROC10 = P1 (free surface boven/line of assymetrie) + +# Laad packages in +import numpy as np +import HYMS +import importlib +importlib.reload(HYMS) +from HYMS import * +import matplotlib.pyplot as plt + +# Constants and initializations +s = 20 #nummer strips op de deur +w = 22 +h = 54 +j = 0 +wo = 1.0 +dl = 1.0 +rl = 1.7 +epsn = 0.1 +M = 0.0 + +q = np.zeros(101) +p = np.zeros((101, 101)) +alfa = np.zeros(101) + +def MOM(z, s, wo, dl, q, p, M, alfa): + phi = np.zeros(101) + for z in range(0, s+1): + phi[z] = p[1, z] + 0.2 * q[z] + alfa[z] = phi[z] / wo + M = 0.0 + for z in range(0, s+1): + M = alfa[z] * (z - 0.5) * dl + + return M,alfa + + +# Main loop + +# ...BRONDEBIETEN +for i in range(0, s+1): + q[i] = wo * (i - 0.5) * dl ** 2 #per coordinaat + +while True and j < 1000: + Mo = M + j += 1 + + # TER HOOGTE VAN ONDERRAND + z = 0 + x = 0 + HYMS.QV6(x, z, rl, p, q) + + for x in range(1, h): + HYMS.V3(x, z, rl, p) + + x = h + HYMS.PV7(x, z, rl, p) + + # TER HOOGTE VAN BRONNEN + for z in range(1, s+1): + x = 0 + HYMS.Q2(x, z, rl, p, q) + for x in range(1, h): + HYMS.VELD(x, z, rl, p) + x = h + HYMS.P4(x, z, rl, p) + + # TER HOOGTE BOVEN BRONNEN + for z in range(s+1, w): + x = 0 + HYMS.P2(x, z, rl, p) + for x in range(1, h): + HYMS.VELD(x, z, rl, p) + x = h + HYMS.P4(x, z, rl, p) + + # TER HOOGTE VAN BOVENRAND + z = w + x = 0 + HYMS.PP5(x, z, rl, p) + for x in range(1, h): + P1(x, z, rl, p) + x = h + HYMS.PP8(x, z, rl, p) + + # MOMENT + M,alfa = MOM(z, s, wo, dl, q, p, M, alfa) + Md = M / ((s * dl) ** 4) #Dimensionless moment (s = breedte sluisdeur, dl = hoogte sluisdeur) + + eps = (M - Mo) / (M / j) + + print(j, M, Md) + + if eps <= epsn: + break + +for z in range(0, s+1): + print(alfa[z]) + +plt.plot(alfa) +plt.title('alfa') +plt.xlim(0,s+1) +plt.ylabel('?') +plt.xlabel('?') + +plt.figure() +plt.imshow(p.transpose(), cmap='bwr', origin='lower',vmin=-80,vmax=80) +plt.title('Element overview of potential flow field') +plt.xlabel('x-dir [m]') +plt.ylabel('y-dir [m]') +plt.xlim(1, len(p[1,:])-1) +plt.ylim(1, len(p[1,:])-1) +plt.colorbar(label='Value') \ No newline at end of file diff --git a/src/lockgate/lockgate5/HYM3.py b/src/lockgate/lgate5/HYM3.py similarity index 100% rename from src/lockgate/lockgate5/HYM3.py rename to src/lockgate/lgate5/HYM3.py diff --git a/src/lockgate/lockgate5/HYM6.py b/src/lockgate/lgate5/HYM6.py similarity index 100% rename from src/lockgate/lockgate5/HYM6.py rename to src/lockgate/lgate5/HYM6.py diff --git a/src/lockgate/lockgate5/HYM7.py b/src/lockgate/lgate5/HYM7.py similarity index 100% rename from src/lockgate/lockgate5/HYM7.py rename to src/lockgate/lgate5/HYM7.py diff --git a/src/lockgate/lockgate5/HYM8.py b/src/lockgate/lgate5/HYM8.py similarity index 100% rename from src/lockgate/lockgate5/HYM8.py rename to src/lockgate/lgate5/HYM8.py diff --git a/src/lockgate/lockgate5/HYM9.py b/src/lockgate/lgate5/HYM9.py similarity index 100% rename from src/lockgate/lockgate5/HYM9.py rename to src/lockgate/lgate5/HYM9.py diff --git a/src/lockgate/lgate5/HYMS.py b/src/lockgate/lgate5/HYMS.py new file mode 100644 index 0000000..f42054e --- /dev/null +++ b/src/lockgate/lgate5/HYMS.py @@ -0,0 +1,259 @@ +import numpy as np + +# Subroutine VOL Functie +def VOL(h1, w1, w2, uo, dl, p, q, alfa): + phi = np.zeros(101) + for x in range(1, h1 + 1): + phi[x] = -p[x, w1 + 1] + p[x, w1 + w2 + 1] + 0.5 * q[x] + alfa[x] = phi[x] / uo + + V = 0.0 + for x in range(0, h1 + 1): + V += alfa[x] * dl + + return V, alfa + +# VELD subroutine +def VELD(x, z, rl, p): + po = p[x, z] + pr = (p[x-1, z] + p[x, z+1] + p[x+1, z] + p[x, z-1]) / 4 + p[x, z] = po + rl * (pr - po) + +# PHI-RANDEN subroutines --> Deze rand is niet in beweging (grenst aan water of aan lucht) + #bovenrand, phi=0 +def P1(x, z, rl, p): + po = p[x, z] + pr = (p[x-1, z] + p[x, z-1] + p[x+1, z]) / 5 + p[x, z] = po + rl * (pr - po) + + #linkerrand, phi=0 +def P2(x, z, rl, p): + po = p[x, z] + pr = (p[x, z+1] + p[x+1, z] + p[x, z-1]) / 5 + p[x, z] = po + rl * (pr - po) + + #benedenrand, phi=0 +def P3(x, z, rl, p): + po = p[x, z] + pr = (p[x-1, z] + p[x, z+1] + p[x+1, z]) / 5 + p[x, z] = po + rl * (pr - po) + + #rechterrand, phi=0 +def P4(x, z, rl, p): + po = p[x, z] + pr = (p[x, z+1] + p[x-1, z] + p[x, z-1]) / 5 + p[x, z] = po + rl * (pr - po) + +# VN-RANDEN subroutines (Vaste randvoorwaarde, bodem of de kant van de sluis. Hier is dus geen debiet (q) mogelijk!) + #bovenrand, vn=0 +def V1(x, z, rl, p): + po = p[x, z] + pr = (p[x-1, z] + p[x, z-1] + p[x+1, z]) / 3 + p[x, z] = po + rl * (pr - po) + + #linkerrand, vn=0 +def V2(x, z, rl, p): + po = p[x, z] + pr = (p[x, z+1] + p[x+1, z] + p[x, z-1]) / 3 + p[x, z] = po + rl * (pr - po) + + #benedenrand, vn=0 +def V3(x, z, rl, p): + po = p[x, z] + pr = (p[x-1, z] + p[x, z+1] + p[x+1, z]) / 3 + p[x, z] = po + rl * (pr - po) + + #rechterrand, vn=0 +def V4(x, z, rl, p): + po = p[x, z] + pr = (p[x, z+1] + p[x-1, z] + p[x, z-1]) / 3 + p[x, z] = po + rl * (pr - po) + +# Q-RANDEN subroutines (grenzend aan de sluisdeur --> Q betekent er is beweging aan deze rand, gezien water in rust is, is de enige vorm van beweging afkomstig van de vibrerende deur) + #bovenrand, qschuif +def Q1(x, z, rl, p, q): + po = p[x, z] + pr = (-q[x] + p[x-1, z] + p[x, z-1] + p[x+1, z]) / 3 + p[x, z] = po + rl * (pr - po) + + #linkerrand, qschuif +def Q2(x, z, rl, p, q): + po = p[x, z] + pr = (q[z] + p[x, z+1] + p[x+1, z] + p[x, z-1]) / 3 + p[x, z] = po + rl * (pr - po) + + #benedenrand, qschuif +def Q3(x, z, rl, p, q): + po = p[x, z] + pr = (q[x] + p[x-1, z] + p[x, z+1] + p[x+1, z]) / 3 + p[x, z] = po + rl * (pr - po) + + #rechterrand, qschuif +def Q4(x, z, rl, p, q): + po = p[x, z] + pr = (-q[z] + p[x, z+1] + p[x-1, z] + p[x, z-1]) / 3 + p[x, z] = po + rl * (pr - po) + +# PHI/PHI-HOEKEN subroutines (hoeken die grenzen aan twee water/lucht randen) +def PP5(x, z, rl, p): + po = p[x, z] + pr = (p[x+1, z] + p[x, z-1]) / 6 + p[x, z] = po + rl * (pr - po) + +def PP6(x, z, rl, p): + po = p[x, z] + pr = (p[x+1, z] + p[x, z+1]) / 6 + p[x, z] = po + rl * (pr - po) + +def PP7(x, z, rl, p): + po = p[x, z] + pr = (p[x-1, z] + p[x, z+1]) / 6 + p[x, z] = po + rl * (pr - po) + +def PP8(x, z, rl, p): + po = p[x, z] + pr = (p[x-1, z] + p[x, z-1]) / 6 + p[x, z] = po + rl * (pr - po) + +# VN/VN-HOEKEN subroutines (hoeken die aan twee kanten een muur hebben, geen debieten dus) +def VV5(x, z, rl, p): + po = p[x, z] + pr = (p[x+1, z] + p[x, z-1]) / 2 + p[x, z] = po + rl * (pr - po) + +def VV6(x, z, rl, p): + po = p[x, z] + pr = (p[x+1, z] + p[x, z+1]) / 2 + p[x, z] = po + rl * (pr - po) + +def VV7(x, z, rl, p): + po = p[x, z] + pr = (p[x-1, z] + p[x, z+1]) / 2 + p[x, z] = po + rl * (pr - po) + +def VV8(x, z, rl, p): + po = p[x, z] + pr = (p[x-1, z] + p[x, z-1]) / 2 + p[x, z] = po + rl * (pr - po) + +# PHI/VN-HOEKEN Subroutines (Hoek met een rand water/lucht en andere rand een muur) +def PV5(x, z, rl, p): + po = p[x, z] + pr = (p[x+1, z] + p[x, z-1]) / 4 + p[x, z] = po + rl * (pr - po) + +def PV6(x, z, rl, p): + po = p[x, z] + pr = (p[x+1, z] + p[x, z+1]) / 4 + p[x, z] = po + rl * (pr - po) + +def PV7(x, z, rl, p): + po = p[x, z] + pr = (p[x-1, z] + p[x, z+1]) / 4 + p[x, z] = po + rl * (pr - po) + +def PV8(x, z, rl, p): + po = p[x, z] + pr = (p[x-1, z] + p[x, z-1]) / 4 + p[x, z] = po + rl * (pr - po) + +# Q/PHI-HOEKEN Subroutines (Hoek met een rand sluisdeur die vibreert en andere kant water/lucht) +def QP5(x, z, rl, p, q): + #linkerbovenhoek, links q en boven phi=0 + po = p[x, z] + pr = (q[z] + p[x+1, z] + p[x, z-1]) / 4 + p[x, z] = po + rl * (pr - po) + +def QP6(x, z, rl, p, q): + #linkeronderhoek, links q en onder phi=0 + po = p[x, z] + pr = (q[z] + p[x+1, z] + p[x, z+1]) / 4 + p[x, z] = po + rl * (pr - po) + +def QP7(x, z, rl, p, q): + #rechteronderhoek, rechts q en onder phi=0 + + po = p[x, z] + pr = (-q[z] + p[x-1, z] + p[x, z+1]) / 4 + p[x, z] = po + rl * (pr - po) + +def QP8(x, z, rl, p, q): + #rechterbovenhoek, rechts q en onder phi=0 + po = p[x, z] + pr = (-q[z] + p[x-1, z] + p[x, z-1]) / 4 + p[x, z] = po + rl * (pr - po) + +# PHI/Q-HOEKEN Subroutines (Hoeken met een kant water/lucht, andere kant de sluisdeur) +def PQ5(x, z, rl, p, q): + #Linkerbovenhoek, boven q en links phi=0 + po = p[x, z] + pr = (-q[x] + p[x+1, z] + p[x, z-1]) / 4 + p[x, z] = po + rl * (pr - po) + +def PQ6(x, z, rl, p, q): + #Linkeronderhoek, onder q en links phi=0 + po = p[x, z] + pr = (-q[x] + p[x+1, z] + p[x, z+1]) / 4 + p[x, z] = po + rl * (pr - po) + +def PQ7(x, z, rl, p, q): + #rechteronderhoek, onder q en recht phi=0 + po = p[x, z] + pr = (q[x] + p[x-1, z] + p[x, z+1]) / 4 + p[x, z] = po + rl * (pr - po) + +def PQ8(x, z, rl, p, q): + #Rechterbovenhoek, boven q en rechts phi=0 + po = p[x, z] + pr = (q[x] + p[x-1, z] + p[x, z-1]) / 4 + p[x, z] = po + rl * (pr - po) + +#Q_VN-HOEKEN (Hoeken met een kant sluisdeur en andere rand een muur zonder debiet) +def QV5(x, z, rl, p, q): + # linker bovenhoek, links q en boven vn=0 + po = p[x][z] + pr = (q[z] + p[x+1][z] + p[x][z-1]) / 2 + p[x][z] = po + rl * (pr - po) + +def QV6(x, z, rl, p, q): + # linker onderhoek, links q en onder vn=0 + po = p[x][z] + pr = (q[z] + p[x+1][z] + p[x][z+1]) / 2 + p[x][z] = po + rl * (pr - po) + +def QV7(x, z, rl, p, q): + # rechter onderhoek, rechts q en onder vn=0 + po = p[x][z] + pr = (-q[z] + p[x-1][z] + p[x][z+1]) / 2 + p[x][z] = po + rl * (pr - po) + +def QV8(x, z, rl, p, q): + # rechter bovenhoek, rechts q en boven vn=0 + po = p[x][z] + pr = (-q[z] + p[x-1][z] + p[x][z-1]) / 2 + p[x][z] = po + rl * (pr - po) + +#VN/Q-HOEKEN (HOeken met een kant een muur en andere kant een sluisdeur) +def VQ5(x, z, rl, p, q): + # linker bovenhoek, boven q en links vn=0 + po = p[x][z] + pr = (-q[x] + p[x+1][z] + p[x][z-1]) / 2 + p[x][z] = po + rl * (pr - po) + +def VQ6(x, z, rl, p, q): + # linker onderhoek, onder q en links vn=0 + po = p[x][z] + pr = (q[x] + p[x+1][z] + p[x][z+1]) / 2 + p[x][z] = po + rl * (pr - po) + +def VQ7(x, z, rl, p, q): + # rechter onderhoek, onder q en rechts vn=0 + po = p[x][z] + pr = (q[x] + p[x-1][z] + p[x][z+1]) / 2 + p[x][z] = po + rl * (pr - po) + +def VQ8(x, z, rl, p, q): + # rechter bovenhoek, boven q en rechts vn=0 + po = p[x][z] + pr = (-q[x] + p[x-1][z] + p[x][z-1]) / 2 + p[x][z] = po + rl * (pr - po) diff --git a/src/lockgate/lgate5/HYMTR.py b/src/lockgate/lgate5/HYMTR.py new file mode 100644 index 0000000..9d02976 --- /dev/null +++ b/src/lockgate/lgate5/HYMTR.py @@ -0,0 +1,170 @@ + +#TOEGEVOEGDE WATERMASSA +#Verticaal translerende, horizontale strip in oneidig water +#en alleen rechterzijde + +#Gebaseerd op paper van P. A. Kolkman, "A simple scheme for calculating +#the added mass of hydraulic gates", Journal of Fluid and Structures +#1988, 2, 339-353 + +#Waterloopkundig Laboratorium +#A. Vrijburcht +#Q1442, 25 november 1993 + +#Vertaald van Fortran naar python door: +#N.L. Zuiderwijk +#2024 + +#In dit voorbeeld wordt aangenomen dat een deur in het verticale plane oscilleert. +#Vanwege de aanname symmetrie in deur en afstand tot deurkas hoef je alleen het rechterdeel van de flow field te berekenen. +#x-dir: In het horizontale plane in get verlengde van de geopende deur en deurkas +#y-dir: In het verticale plane +#z-dir: In het horizontale plane loodrecht op de geopende deur en richting deurkas uit (de sluiskolk in) +#putten verwijst naar onderkant van de sluisdeur (strip) +#Bron verwijst naar bovenkant sluisdeur (strip) +import numpy as np +import HYMS +import importlib +importlib.reload(HYMS) +from HYMS import * +import matplotlib.pyplot as plt + +# Initialize parameters +w1 = 30 #Verticale afstand onderrand / strip (?) Ik denk dat strip gaat over een rubberen strip die op de deurkas zit bevestigd om een spleet af te dichten/de deur zonder stoot te openen of het gaat om de spleet +w2 = 1 #Dikte strip (ookwel deur) +w3 = 30 #Verticale afstand (?) strip / bovenrand +h1 = 50 #breedte strip die de deur voorsteld (translerende deel). +h2 = 10 #horinzontale afstand strip (ookwel deur) tot de zijkant van de deurkas (we berekenen maar helft van het flow field vanwege aanname symmetrisch dus alleen rechterhelft) +#h1 + h2 = totale lengte deur in horizontale plane en de afstand deur tot deurkas +uo = 1.0 #Snelheid van de translerende beweging deur (m/s) +dl = 1.0 #stapje in lengte langzij deurlengte +rl = 1.8 #Relaxation factor (usually 1.5-1.7) +epsn = 0.05 #Nauwkeurigheidsmarge (95%), Accuracy range +V = 0.00 #Volume (Maar waarvan?) + +# Initialize arrays +q = np.zeros(101) #Wordt de debiet array +p = np.zeros((101, 101))#Wordt de pressure array per tak/strip? +alfa = np.zeros(101) #wordt de array van ratio (potential / velocity vector) langs de lengte van de sluisdeur + +# Brondebieten (in m^2/s) +for i in range(1, h1 + 1): + q[i] = uo * dl + +j = 0 +Vo = V + +# Main loop +while True: + Vo = V + j += 1 + + ########################################################### + #### Onderrand #### + z = 1 + #Links + x = 1 + HYMS.PV6(x, z, rl, p) + #Onder + for x in range(2, h1 + h2 + 1): + HYMS.P3(x, z, rl, p) + #Rechts + HYMS.PP7(h1 + h2 + 1, z, rl, p) + + ########################################################### + #### Tussen onderrand en putten #### + for z in range(2, w1 + 1): + #links + HYMS.V2(1, z, rl, p) + #veld + for x in range(2, h1 + h2 + 1): + HYMS.VELD(x, z, rl, p) + #Rechts + HYMS.P4(h1 + h2 + 1, z, rl, p) + + ########################################################### + # Ter hoogte van putten + z = w1 + 1 + #links + HYMS.VQ5(1, z, rl, p, q) + #putten + for x in range(2, h1 + 1): + HYMS.Q1(x, z, rl, p, q) + #veld + for x in range(h1 + 1, h1 + h2 + 1): + HYMS.VELD(x, z, rl, p) + #rechts + HYMS.P4(h1 + h2 + 1, z, rl, p) + + ########################################################### + # Ter hoogte van bronnen + z = w1 + w2 + 1 + #links + HYMS.VQ6(1, z, rl, p, q) + #bronnen + for x in range(2, h1 + 1): + HYMS.Q3(x, z, rl, p, q) + #veld + for x in range(h1 + 1, h1 + h2 + 1): + HYMS.VELD(x, z, rl, p) + #rechts + HYMS.P4(h1 + h2 + 1, z, rl, p) + + ########################################################### + # Tussen bronnen en bovenrand + #links + for z in range(w1 + w2 + 2, w1 + w2 + w3 + 1): + HYMS.V2(1, z, rl, p) + #veld + for x in range(2, h1 + h2 + 1): + HYMS.VELD(x, z, rl, p) + #rechts + HYMS.P4(h1 + h2 + 1, z, rl, p) + + ########################################################### + # Bovenrand + z = w1 + w2 + w3 + 1 + #links + HYMS.PV5(1, z, rl, p) + #boven + for x in range(2, h1 + h2 + 1): + HYMS.P1(x, z, rl, p) + #rechts + HYMS.PP8(h1 + h2 + 1, z, rl, p) + + # Volume calculation + V, alfa = VOL(h1, w1, w2, uo, dl, p, q, alfa) #Deze stap is me nog onbekend + + # Dimensieloos volume + Vd = 2 * V / ((2 * h1 * dl) ** 2) #Still dont get is, V is in m3, h1 in m and dl in m --> (h1*dl) ^2 is not m3? + + # Check for convergence + eps = (V - Vo) / (V / j) + print(j, V, Vd) + + if eps <= epsn: + break + +#remove all first rows +alfa = alfa[1::] +p = p[1::,1::] + +# Output alfa !!!(IK denk rotatiesnelheid / versnelling?) +for x in range(0, h1 + 1): + print(alfa[x]) + +plt.plot(alfa) +plt.title('alfa') +plt.xlim([0,h1+h2]) +plt.xlabel('x-dir') +plt.ylabel('phi / Vs') + +plt.figure() +plt.imshow(p.transpose(), cmap='bwr', origin='lower',vmin=-30,vmax=30) +plt.title('Element overview of potential flow field') +plt.xlabel('x-dir') +plt.ylabel('y-dir') +plt.xlim([0,h1+h2]) +plt.ylim([0,w1+w2+w3]) +plt.colorbar(label='Potentiaal') + diff --git a/src/lockgate/lockgate5/process.py b/src/lockgate/lgate5/process.py similarity index 100% rename from src/lockgate/lockgate5/process.py rename to src/lockgate/lgate5/process.py diff --git a/src/lockgate/lockgate8/INTER.py b/src/lockgate/lgate8/INTER.py similarity index 100% rename from src/lockgate/lockgate8/INTER.py rename to src/lockgate/lgate8/INTER.py diff --git a/src/lockgate/lockgate8/REFL2.py b/src/lockgate/lgate8/REFL2.py similarity index 100% rename from src/lockgate/lockgate8/REFL2.py rename to src/lockgate/lgate8/REFL2.py diff --git a/src/lockgate/lockgate5/HYM1.py b/src/lockgate/lockgate5/HYM1.py deleted file mode 100644 index 561f59e..0000000 --- a/src/lockgate/lockgate5/HYM1.py +++ /dev/null @@ -1,53 +0,0 @@ -# Program HYMA1 -# Toegevoegde watermassa -# Horizontaal translerende, vertical strip loodrecht op bodem -# aan een zijde water en water erboven - -# Laad packages in -import numpy as np -from process import volume, proc - -#----------------------------------------------------------------------------- -# Invoer -#----------------------------------------------------------------------------- -s = 6 -w = 12 -h = 54 -uo = 1. -dl = 1. -rl = 1.5 -epsn = .025 -V = 0.0 - -#----------------------------------------------------------------------------- -# Rekenen -#----------------------------------------------------------------------------- - -# initialiseren -q = np.zeros(s) -p = np.zeros((h+1, w+1)) -j = 0 - -# Bron debieten -for i in range(0, s): - q[i] = uo * dl - -while True: - Vo = V - j += 1 - - # ------ - # Door het domein - p = proc(s, h, w, rl, p, q) - - # ------ - # Volume - V, alfa = volume(s, uo, dl, q, p) - Vd = V / ((s*dl)**2) - eps = (V-Vo) / (V/j) - print(j, V, Vd) - - if eps < epsn: - for z in range(0, s): - print(alfa[z]) - break diff --git a/src/lockgate/lockgate5/HYM2.py b/src/lockgate/lockgate5/HYM2.py deleted file mode 100644 index d18e5a0..0000000 --- a/src/lockgate/lockgate5/HYM2.py +++ /dev/null @@ -1,54 +0,0 @@ -# Program HYMA2 -# Toegevoegde MASSATRAAGHEIDSMOMENT -# Om bodem roterende, verticale strip loodrecht op bodem -# aan een zijde water en water erboven - -# Laad packages in -import numpy as np -from process import moment, proc - -#----------------------------------------------------------------------------- -# Invoer -#----------------------------------------------------------------------------- -s = 6 -w = 12 -h = 54 -wo = 1. -dl = 1. -rl = 1.5 -epsn = .005 -M = 0. - - -#----------------------------------------------------------------------------- -# Rekenen -#----------------------------------------------------------------------------- - -# initialiseren -q = np.zeros(s) -p = np.zeros((h+1, w+1)) -j = 0 - -# Bron debieten -for i in range(0, s): - q[i] = wo * (i - 0.5) * dl**2 - -while True: - Mo = M - j += 1 - - # ------ - # Door het domein - p = proc(s, h, w, rl, p, q) - - # ------ - # Moment - M, alfa = moment(s, wo, dl, q, p) - Md = M / ((s*dl)**4) - eps = (M-Mo) / (M/j) - print(j, M, Md) - - if eps < epsn: - for z in range(0, s): - print(alfa[z]) - break