Skip to content
Snippets Groups Projects
Commit 97f4f4c5 authored by Anne Philipp's avatar Anne Philipp
Browse files

better check on grid and arae parameter formats

parent 1d15e270
No related branches found
No related tags found
No related merge requests found
......@@ -60,6 +60,7 @@ import inspect
sys.path.append('../')
import _config
from mods.tools import my_error, silent_remove
from mods.checks import check_grid_area
# ------------------------------------------------------------------------------
# CLASS
......@@ -474,32 +475,39 @@ class ControlFile(object):
print('Use default value "12" for flux forecast!')
self.accmaxstep='12'
# if area was provided (only from commandline)
# decompose area into its 4 components
if self.area:
components = self.area.split('/')
self.upper, self.left, self.lower, self.right = components
self.grid, self.area = check_grid_area(self.grid, self.area,
self.upper, self.lower,
self.left, self.right)
# convert grid and area components to correct format and input
if 'N' in self.grid: # Gaussian output grid
self.area = 'G'
else:
# check on grid format
if float(self.grid) / 100. >= 0.5:
# grid is defined in 1/1000 degrees; old method
self.grid = '{}/{}'.format(float(self.grid) / 1000.,
float(self.grid) / 1000.)
self.area = '{}/{}/{}/{}'.format(float(self.upper) / 1000.,
float(self.left) / 1000.,
float(self.lower) / 1000.,
float(self.right) / 1000.)
elif float(self.grid) / 100. < 0.5:
# grid is defined in normal degree; new method
self.grid = '{}/{}'.format(float(self.grid), float(self.grid))
self.area = '{}/{}/{}/{}'.format(float(self.upper),
float(self.left),
float(self.lower),
float(self.right))
#if 'N' in self.grid: # Gaussian output grid
# self.area = 'G'
# else:
# if '/' in self.grid:
# gridx, gridy = self.grid.split('/')
# if gridx == gridy:
# self.grid = gridx
# # check on grid format
# if float(self.grid) / 100. >= 0.5:
# # grid is defined in 1/1000 degrees; old format
# self.grid = '{}/{}'.format(float(self.grid) / 1000.,
# float(self.grid) / 1000.)
# self.area = '{}/{}/{}/{}'.format(float(self.upper) / 1000.,
# float(self.left) / 1000.,
# float(self.lower) / 1000.,
# float(self.right) / 1000.)
# elif float(self.grid) / 100. < 0.5:
# # grid is defined in normal degree; new format
# self.grid = '{}/{}'.format(float(self.grid), float(self.grid))
# self.area = '{}/{}/{}/{}'.format(float(self.upper),
# float(self.left),
# float(self.lower),
# float(self.right))
return
......
#!/usr/bin/env python
# -*- coding: utf-8 -*-
##*******************************************************************************
# @Author: Anne Philipp (University of Vienna)
#
# @Date: November 2018
#
# @Change History:
#
# @License:
# (C) Copyright 2014-2018.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
#
# @Modul Description:
#
#
# @Module Content:
#
#*******************************************************************************
# ------------------------------------------------------------------------------
# MODULES
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
# FUNCTIONS
# ------------------------------------------------------------------------------
def check_grid_area(grid, area, upper, lower, left , right):
'''
'''
# if area was provided
# decompose area into its 4 components
if area:
components = area.split('/')
upper, left, lower, right = components
if 'N' in grid: # Gaussian output grid
area = 'G'
return grid, area
if '/' in grid:
gridx, gridy = grid.split('/')
if gridx == gridy:
grid = gridx
else:
raise ValueError('GRID parameter contains two values '
'which are unequal %s' (grid))
# determine grid format
if float(grid) / 100. >= 0.5:
# grid is defined in 1/1000 degrees; old format
grid = '{}/{}'.format(float(grid) / 1000.,
float(grid) / 1000.)
elif float(grid) / 100. < 0.5:
# grid is defined in normal degree; new format
grid = '{}/{}'.format(float(grid), float(grid))
# determine area format
if (float(upper) / 1000. >= 0.05 and
float(lower) / 1000. >= 0.05 and
float(left) / 1000. >= 0.05 and
float(right) / 1000. >= 0.05):
# area is defined in 1/1000 degrees; old format
area = '{}/{}/{}/{}'.format(float(upper) / 1000.,
float(left) / 1000.,
float(lower) / 1000.,
float(right) / 1000.)
elif (float(upper) / 1000. < 0.05 and
float(lower) / 1000. < 0.05 and
float(left) / 1000. < 0.05 and
float(right) / 1000. < 0.05):
# area is already in new format
area = '{}/{}/{}/{}'.format(float(upper),
float(left),
float(lower),
float(right))
else:
raise ValueError('The area components have different '
'formats: %s ' (area))
return grid, area
\ No newline at end of file
......@@ -99,7 +99,6 @@ def none_or_int(value):
return None
return int(value)
def get_cmdline_arguments():
'''Decomposes the command line arguments and assigns them to variables.
Apply default values for non mentioned arguments.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment