arithmetic operations

This commit is contained in:
Michael Krayer 2021-10-15 15:04:22 +02:00
parent 40d549f714
commit 6df7654064
1 changed files with 28 additions and 3 deletions

View File

@ -295,17 +295,42 @@ class PPP:
#def vorticity(self,axis=None,key_out=None,keep_derivatives=False,on_pressure_grid=True):
def multiply(self,key1,key2,key_out=None,on_pressure_grid=True):
def arithmetic_operation(self,key1,operation,key2,key_out=None,on_pressure_grid=True):
import operator
if operation in ('add','+'):
op = operator.iadd
elif operation in ('subtract','sub','-'):
op = operator.isub
elif operation in ('divide','div','/'):
op = operator.itruediv
elif operation in ('multiply','mul','*'):
op = operator.imul
if key_out is None:
key_out = key1
if not self.field[key1].has_same_grid(self.field[key2]) or on_pressure_grid:
self.shift_to_pressure_grid(key1,key_out)
self.shift_to_pressure_grid(key2,'tmp')
self.field[key_out] *= self.field['tmp']
op(self.field[key_out],self.field['tmp'])
self.delete('tmp')
else:
self.copy(key1,key_out)
self.field[key_out] *= self.field[key2]
op(self.field[key_out],self.field[key2])
return
def add(self,key1,key2,key_out=None,on_pressure_grid=True):
self.arithmetic_operation(key1,'+',key2,key_out=key_out,on_pressure_grid=on_pressure_grid)
return
def subtract(self,key1,key2,key_out=None,on_pressure_grid=True):
self.arithmetic_operation(key1,'-',key2,key_out=key_out,on_pressure_grid=on_pressure_grid)
return
def multiply(self,key1,key2,key_out=None,on_pressure_grid=True):
self.arithmetic_operation(key1,'*',key2,key_out=key_out,on_pressure_grid=on_pressure_grid)
return
def divide(self,key1,key2,key_out=None,on_pressure_grid=True):
self.arithmetic_operation(key1,'/',key2,key_out=key_out,on_pressure_grid=on_pressure_grid)
return
def gaussian_filter(self,key,sigma,truncate=4.0,key_out=None,iterate=False,verbose=True):