Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion flow360/cloud/http_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

import requests

from flow360 import Env
from flow360 import Env, __version__
from flow360.cloud.security import api_key


Expand All @@ -20,6 +20,7 @@ def api_key_auth(request):
if not key:
raise ValueError("API key not found, please set it by commandline: flow360 configure.")
request.headers["simcloud-api-key"] = key
request.headers["flow360-python-version"] = __version__
return request


Expand Down
22 changes: 22 additions & 0 deletions flow360/component/flow360_base_model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
"""
Flow360 base Model
"""
from datetime import datetime
from typing import List, Optional

from pydantic import BaseModel, Extra, Field


class Flow360BaseModel(BaseModel, extra=Extra.allow):
"""
Flow360 base Model
"""

name: str
user_id: Optional[str] = Field(alias="userId")
solver_version: Optional[str] = Field(alias="solverVersion")
tags: Optional[List[str]]
created_at: Optional[str] = Field(alias="createdAt")
updated_at: Optional[datetime] = Field(alias="updatedAt")
updated_by: Optional[str] = Field(alias="updatedBy")
user_upload_file_name: Optional[str]
69 changes: 69 additions & 0 deletions flow360/component/flow360_solver_params.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
"""
Flow360 solver parameters
"""
from typing import Any, Dict, List, Optional, Union

from pydantic import BaseModel, Extra, Field


class MeshBoundary(BaseModel):
"""
Mesh boundary
"""

no_slip_walls: Optional[Union[List[str], List[int]]] = Field(alias="noSlipWalls")


class Flow360MeshParams(BaseModel):
"""
Flow360 mesh parameters
"""

boundaries: MeshBoundary


class Boundary(BaseModel):
"""
Basic Boundary class
"""

type: str


class NoSlipWall(Boundary):
"""
No slip wall boundary
"""

type = "NoSlipWall"
velocity: Union[float, str] = Field(alias="Velocity")


class SlipWall(Boundary):
"""
Slip wall boundary
"""

type = "SlipWall"


BoundaryType = Union[NoSlipWall, SlipWall]


class ActuatorDisk(BaseModel):
"""
Actuator disk component
"""

center: Any
axis_thrust: Any = Field(alias="axisThrust")
thickness: Any
force_per_area: Any = Field(alias="forcePerArea")


class Flow360Params(BaseModel, extra=Extra.allow):
"""
Flow360 solver parameters
"""

boundaries: Optional[Dict[str, BoundaryType]]
18 changes: 5 additions & 13 deletions flow360/component/surface_mesh.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,23 @@
"""
import json
import os
from datetime import datetime
from typing import List, Optional
from typing import Optional

from pydantic import BaseModel, Extra, Field
from pydantic import Extra, Field

from flow360.cloud.http_util import http
from flow360.cloud.s3_utils import S3TransferType
from flow360.component.flow360_base_model import Flow360BaseModel


class SurfaceMesh(BaseModel, extra=Extra.allow):
class SurfaceMesh(Flow360BaseModel, extra=Extra.allow):
"""
Surface mesh component
"""

surface_mesh_id: Optional[str] = Field(alias="id")
name: str
status: Optional[str]
user_id: Optional[str] = Field(alias="userId")
solver_version: Optional[str] = Field(alias="solverVersion")
config: Optional[str]
tags: Optional[List[str]]
created_at: Optional[str] = Field(alias="createdAt")
updated_at: Optional[datetime] = Field(alias="updatedAt")
updated_by: Optional[str] = Field(alias="updatedBy")
user_upload_file_name: Optional[str]

def download(self, file_name: str, to_file=".", keep_folder: bool = True):
"""
Expand Down Expand Up @@ -76,7 +68,7 @@ def from_cloud(cls, surface_mesh_id: str):
return None

@classmethod
def from_surface_mesh(
def from_file(
cls, surface_mesh_name: str, file_name: str, solver_version: str = None, tags: [str] = None
):
"""
Expand Down
123 changes: 123 additions & 0 deletions flow360/component/test_flow360_solver_params.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
from flow360.component.flow360_solver_params import (
Flow360MeshParams,
Flow360Params,
MeshBoundary,
)


def test_boundary():
assert MeshBoundary.parse_raw(
"""
{
"noSlipWalls": [
"fluid/fuselage",
"fluid/leftWing",
"fluid/rightWing"
]
}
"""
)
assert MeshBoundary.parse_raw(
"""
{
"noSlipWalls": [
1,
2,
3
]
}
"""
)


def test_flow360param():
assert Flow360MeshParams.parse_raw(
"""
{
"boundaries": {
"noSlipWalls": [
"fluid/fuselage",
"fluid/leftWing",
"fluid/rightWing"
]
}
}
"""
)

assert Flow360MeshParams.parse_raw(
"""
{
"boundaries": {
"noSlipWalls": [
1,
2,
3
]
}
}
"""
)


def test_flow360param():
mesh = Flow360Params.parse_raw(
"""
{
"boundaries": {
"fluid/fuselage": {
"type": "NoSlipWall"
},
"fluid/leftWing": {
"type": "NoSlipWall"
},
"fluid/rightWing": {
"type": "NoSlipWall"
},
"fluid/farfield": {
"type": "Freestream"
}
},
"actuatorDisks": [
{
"center": [
3.6,
-5.08354845,
0
],
"axisThrust": [
-0.96836405,
-0.06052275,
0.24209101
],
"thickness": 0.42,
"forcePerArea": {
"radius": [],
"thrust": [],
"circumferential": []
}
},
{
"center": [
3.6,
5.08354845,
0
],
"axisThrust": [
-0.96836405,
0.06052275,
0.24209101
],
"thickness": 0.42,
"forcePerArea": {
"radius": [],
"thrust": [],
"circumferential": []
}
}
]
}
"""
)

assert mesh
Loading