add stokes problem
This commit is contained in:
45
examples/problems/stokes.py
Normal file
45
examples/problems/stokes.py
Normal file
@@ -0,0 +1,45 @@
|
||||
import numpy as np
|
||||
import torch
|
||||
|
||||
from pina.problem import SpatialProblem
|
||||
from pina.operators import nabla, grad, div
|
||||
from pina import Condition, Span, LabelTensor
|
||||
|
||||
|
||||
class Stokes(SpatialProblem):
|
||||
|
||||
spatial_variables = ['x', 'y']
|
||||
output_variables = ['ux', 'uy', 'p']
|
||||
domain = Span({'x': [-2, 2], 'y': [-1, 1]})
|
||||
|
||||
def momentum(input_, output_):
|
||||
#print(nabla(output_['ux', 'uy'], input_))
|
||||
#print(grad(output_['p'], input_))
|
||||
nabla_ = LabelTensor.hstack([
|
||||
LabelTensor(nabla(output_['ux'], input_), ['x']),
|
||||
LabelTensor(nabla(output_['uy'], input_), ['y'])])
|
||||
#return LabelTensor(nabla_.tensor + grad(output_['p'], input_).tensor, ['x', 'y'])
|
||||
return nabla_.tensor + grad(output_['p'], input_).tensor
|
||||
|
||||
def continuity(input_, output_):
|
||||
return div(output_['ux', 'uy'], input_)
|
||||
|
||||
def inlet(input_, output_):
|
||||
value = 2.0
|
||||
return output_['ux'] - value
|
||||
|
||||
def outlet(input_, output_):
|
||||
value = 0.0
|
||||
return output_['p'] - value
|
||||
|
||||
def wall(input_, output_):
|
||||
value = 0.0
|
||||
return output_['ux', 'uy'].tensor - value
|
||||
|
||||
conditions = {
|
||||
'gamma_top': Condition(Span({'x': [-2, 2], 'y': 1}), wall),
|
||||
'gamma_bot': Condition(Span({'x': [-2, 2], 'y': -1}), wall),
|
||||
'gamma_out': Condition(Span({'x': 2, 'y': [-1, 1]}), outlet),
|
||||
'gamma_in': Condition(Span({'x': -2, 'y': [-1, 1]}), inlet),
|
||||
'D': Condition(Span({'x': [-2, 2], 'y': [-1, 1]}), [momentum, continuity]),
|
||||
}
|
||||
Reference in New Issue
Block a user