marine-offshore-engineering

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Marine and Offshore Engineering SME Skill

海洋与海上工程专家技能

Comprehensive marine and offshore engineering knowledge for platform design, subsea systems, mooring, and regulatory compliance.
涵盖平台设计、水下系统、系泊及合规性要求的全面海洋与海上工程知识。

When to Use This Skill

何时使用本技能

Use this SME knowledge when:
  • Platform design - FPSOs, semi-submersibles, TLPs, SPARs
  • Subsea systems - Templates, manifolds, pipelines, umbilicals
  • Marine operations - Installation, commissioning, decommissioning
  • Regulatory compliance - DNV, API, ISO standards
  • Environmental loading - Wind, wave, current forces
  • Station-keeping - Mooring and dynamic positioning
在以下场景使用本专家知识:
  • 平台设计 - FPSOs、semi-submersibles、TLPs、SPARs
  • 水下系统 - 模板、管汇、管道、脐带缆
  • 海上作业 - 安装、调试、退役
  • 合规性要求 - DNV、API、ISO标准
  • 环境载荷 - 风、浪、流作用力
  • 定位保持 - 系泊与动力定位

Core Knowledge Areas

核心知识领域

1. Platform Types

1. 平台类型

Fixed Platforms:
  • Jacket structures - Steel lattice framework, common in shallow water (<150m)
  • Jack-ups - Mobile platforms with retractable legs
  • Compliant towers - Slender structures for deeper water (300-900m)
Floating Platforms:
  • Semi-submersibles - Pontoons and columns, excellent motion characteristics
  • TLPs (Tension Leg Platforms) - Vertically moored, minimal vertical motion
  • SPARs - Deep draft cylindrical hull, good in ultra-deep water
  • FPSOs - Converted/purpose-built tankers for production and storage
Selection Criteria:
python
def select_platform_type(water_depth: float, field_life: float) -> str:
    """
    Platform type selection based on water depth.

    Args:
        water_depth: Water depth in meters
        field_life: Expected field life in years

    Returns:
        Recommended platform type
    """
    if water_depth < 150:
        return "Fixed platform (Jacket)"
    elif water_depth < 500:
        if field_life < 5:
            return "Jack-up (temporary)"
        else:
            return "Semi-submersible or FPSO"
    elif water_depth < 2000:
        return "Semi-submersible, SPAR, or FPSO"
    else:  # Ultra-deep water
        return "SPAR or FPSO"
固定式平台:
  • Jacket结构 - 钢制网格框架,常用于浅水区(<150m)
  • 自升式平台(Jack-ups) - 带有可伸缩桩腿的移动式平台
  • 顺应塔 - 细长结构,适用于深水区(300-900m)
浮式平台:
  • 半潜式平台(Semi-submersibles) - 浮箱与立柱结构,运动性能优异
  • TLPs(张力腿平台) - 垂直系泊,垂向运动极小
  • SPARs - 深吃水圆柱形船体,适用于超深水区
  • FPSOs - 由油轮改装或专门建造的生产储卸装置
选型标准:
python
def select_platform_type(water_depth: float, field_life: float) -> str:
    """
    Platform type selection based on water depth.

    Args:
        water_depth: Water depth in meters
        field_life: Expected field life in years

    Returns:
        Recommended platform type
    """
    if water_depth < 150:
        return "Fixed platform (Jacket)"
    elif water_depth < 500:
        if field_life < 5:
            return "Jack-up (temporary)"
        else:
            return "Semi-submersible or FPSO"
    elif water_depth < 2000:
        return "Semi-submersible, SPAR, or FPSO"
    else:  # Ultra-deep water
        return "SPAR or FPSO"

2. Environmental Loading

2. 环境载荷

Wind Loading:
  • API RP 2A: V = V_1hr * (z/10)^(1/7) # Wind profile
  • Force: F = 0.5 * ρ * V² * Cd * A
Wave Loading:
  • Airy (Linear) Wave Theory - Small amplitude waves
  • Stokes 2nd/3rd Order - Finite amplitude
  • Stream Function - Highly nonlinear waves
Current Loading:
python
import numpy as np

def calculate_current_force(
    velocity: float,  # m/s
    diameter: float,   # m
    length: float,     # m
    cd: float = 1.2    # Drag coefficient
) -> float:
    """
    Calculate current force on cylinder.

    Morison equation: F = 0.5 * ρ * V² * Cd * D * L

    Args:
        velocity: Current velocity
        diameter: Member diameter
        length: Member length
        cd: Drag coefficient

    Returns:
        Force in kN
    """
    rho = 1025  # kg/m³ (seawater)
    F = 0.5 * rho * velocity**2 * cd * diameter * length
    return F / 1000  # Convert to kN
风载荷:
  • API RP 2A: V = V_1hr * (z/10)^(1/7) # 风剖面公式
  • 作用力:F = 0.5 * ρ * V² * Cd * A
波浪载荷:
  • Airy(线性)波浪理论 - 适用于小振幅波浪
  • Stokes二阶/三阶理论 - 适用于有限振幅波浪
  • 流函数法 - 适用于高度非线性波浪
海流载荷:
python
import numpy as np

def calculate_current_force(
    velocity: float,  # m/s
    diameter: float,   # m
    length: float,     # m
    cd: float = 1.2    # Drag coefficient
) -> float:
    """
    Calculate current force on cylinder.

    Morison equation: F = 0.5 * ρ * V² * Cd * D * L

    Args:
        velocity: Current velocity
        diameter: Member diameter
        length: Member length
        cd: Drag coefficient

    Returns:
        Force in kN
    """
    rho = 1025  # kg/m³ (seawater)
    F = 0.5 * rho * velocity**2 * cd * diameter * length
    return F / 1000  # Convert to kN

3. Mooring Systems

3. 系泊系统

Types:
  • Catenary - Chain/wire, relies on weight for restoring force
  • Taut - Polyester/steel wire, high pretension
  • Semi-taut - Hybrid configuration
Design Standards:
  • API RP 2SK - Stationkeeping Systems
  • DNV-OS-E301 - Position Mooring
  • ISO 19901-7 - Stationkeeping Systems
Safety Factors:
yaml
mooring_safety_factors:
  intact:
    uls: 1.67    # Ultimate Limit State
    als: 1.25    # Accidental Limit State
  damaged:
    uls: 1.25
    als: 1.05

  fatigue_design_factor: 10.0
类型:
  • 悬链线系泊 - 链条/钢缆,依靠自身重量提供恢复力
  • 紧绷式系泊 - 聚酯/钢缆,高预张力
  • 半紧绷式系泊 - 混合配置
设计标准:
  • API RP 2SK - 定位保持系统
  • DNV-OS-E301 - 定位系泊
  • ISO 19901-7 - 定位保持系统
安全系数:
yaml
mooring_safety_factors:
  intact:
    uls: 1.67    # Ultimate Limit State
    als: 1.25    # Accidental Limit State
  damaged:
    uls: 1.25
    als: 1.05

  fatigue_design_factor: 10.0

4. Subsea Systems

4. 水下系统

Components:
  • Subsea trees - Wellhead control
  • Manifolds - Production gathering
  • Flowlines - Fluid transport
  • Risers - Platform connection
  • Umbilicals - Control/power/chemical injection
Pipeline Design:
python
def pipeline_wall_thickness(
    diameter: float,  # mm
    pressure: float,  # MPa
    yield_stress: float,  # MPa
    design_factor: float = 0.72  # API 5L
) -> float:
    """
    Calculate required pipeline wall thickness.

    Barlow's formula: t = P*D / (2*σ*F)

    Args:
        diameter: Outer diameter
        pressure: Design pressure
        yield_stress: Material yield stress
        design_factor: Design factor

    Returns:
        Wall thickness in mm
    """
    t = (pressure * diameter) / (2 * yield_stress * design_factor)

    # Add corrosion allowance
    corrosion_allowance = 3.0  # mm
    t_total = t + corrosion_allowance

    return t_total
组件:
  • 水下采油树(Subsea trees) - 井口控制
  • 管汇 - 生产集输
  • 出油管 - 流体输送
  • 立管 - 平台连接
  • 脐带缆 - 控制/电力/化学药剂注入
管道设计:
python
def pipeline_wall_thickness(
    diameter: float,  # mm
    pressure: float,  # MPa
    yield_stress: float,  # MPa
    design_factor: float = 0.72  # API 5L
) -> float:
    """
    Calculate required pipeline wall thickness.

    Barlow's formula: t = P*D / (2*σ*F)

    Args:
        diameter: Outer diameter
        pressure: Design pressure
        yield_stress: Material yield stress
        design_factor: Design factor

    Returns:
        Wall thickness in mm
    """
    t = (pressure * diameter) / (2 * yield_stress * design_factor)

    # Add corrosion allowance
    corrosion_allowance = 3.0  # mm
    t_total = t + corrosion_allowance

    return t_total

5. Regulatory Framework

5. 监管框架

Classification Societies:
  • DNV (Det Norske Veritas) - Norwegian
  • ABS (American Bureau of Shipping) - American
  • Lloyd's Register - British
  • Bureau Veritas - French
Key Standards:
yaml
standards:
  structural:
    - DNV-OS-C101: Design of Offshore Steel Structures
    - API RP 2A-WSD: Fixed Offshore Platforms
    - ISO 19902: Fixed Steel Structures

  floating:
    - DNV-OS-C103: Floating Structures
    - API RP 2FPS: Planning, Designing, Constructing Floating Production Systems

  mooring:
    - DNV-OS-E301: Position Mooring
    - API RP 2SK: Stationkeeping Systems
    - ISO 19901-7: Stationkeeping Systems

  subsea:
    - API 17D: Subsea Wellhead and Christmas Tree Equipment
    - API 17J: Unbonded Flexible Pipe
    - DNV-OS-F101: Submarine Pipeline Systems

  operations:
    - DNV-RP-H103: Modelling and Analysis of Marine Operations
    - ISO 19901-6: Marine Operations
船级社:
  • DNV (Det Norske Veritas) - 挪威
  • ABS (American Bureau of Shipping) - 美国
  • Lloyd's Register - 英国
  • Bureau Veritas - 法国
核心标准:
yaml
standards:
  structural:
    - DNV-OS-C101: Design of Offshore Steel Structures
    - API RP 2A-WSD: Fixed Offshore Platforms
    - ISO 19902: Fixed Steel Structures

  floating:
    - DNV-OS-C103: Floating Structures
    - API RP 2FPS: Planning, Designing, Constructing Floating Production Systems

  mooring:
    - DNV-OS-E301: Position Mooring
    - API RP 2SK: Stationkeeping Systems
    - ISO 19901-7: Stationkeeping Systems

  subsea:
    - API 17D: Subsea Wellhead and Christmas Tree Equipment
    - API 17J: Unbonded Flexible Pipe
    - DNV-OS-F101: Submarine Pipeline Systems

  operations:
    - DNV-RP-H103: Modelling and Analysis of Marine Operations
    - ISO 19901-6: Marine Operations

6. Marine Operations

6. 海上作业

Installation Methods:
  • Heavy Lift - Crane vessels for topsides
  • Float-over - Deck floated over substructure
  • Pipelaying - S-lay, J-lay, reel-lay methods
Weather Windows:
python
def calculate_weather_window(
    sea_states: list,
    operation_limit: dict,
    duration_required: float  # hours
) -> list:
    """
    Identify suitable weather windows for marine operations.

    Args:
        sea_states: List of sea state forecasts
        operation_limit: Limits (Hs_max, Tp_range, current_max)
        duration_required: Required continuous calm period

    Returns:
        List of suitable time windows
    """
    windows = []
    current_window_start = None
    current_window_duration = 0

    for i, state in enumerate(sea_states):
        # Check if conditions are suitable
        suitable = (
            state['Hs'] <= operation_limit['Hs_max'] and
            state['current'] <= operation_limit['current_max']
        )

        if suitable:
            if current_window_start is None:
                current_window_start = i
            current_window_duration += state['time_step']

            # Check if window is long enough
            if current_window_duration >= duration_required:
                windows.append({
                    'start': current_window_start,
                    'duration': current_window_duration,
                    'conditions': 'suitable'
                })
        else:
            # Window ended
            current_window_start = None
            current_window_duration = 0

    return windows
安装方法:
  • 重型吊装 - 使用起重船吊装上部模块
  • 浮托安装 - 甲板浮运至下部结构上方
  • 铺管 - S型铺管、J型铺管、卷筒铺管法
气象窗口:
python
def calculate_weather_window(
    sea_states: list,
    operation_limit: dict,
    duration_required: float  # hours
) -> list:
    """
    Identify suitable weather windows for marine operations.

    Args:
        sea_states: List of sea state forecasts
        operation_limit: Limits (Hs_max, Tp_range, current_max)
        duration_required: Required continuous calm period

    Returns:
        List of suitable time windows
    """
    windows = []
    current_window_start = None
    current_window_duration = 0

    for i, state in enumerate(sea_states):
        # Check if conditions are suitable
        suitable = (
            state['Hs'] <= operation_limit['Hs_max'] and
            state['current'] <= operation_limit['current_max']
        )

        if suitable:
            if current_window_start is None:
                current_window_start = i
            current_window_duration += state['time_step']

            # Check if window is long enough
            if current_window_duration >= duration_required:
                windows.append({
                    'start': current_window_start,
                    'duration': current_window_duration,
                    'conditions': 'suitable'
                })
        else:
            # Window ended
            current_window_start = None
            current_window_duration = 0

    return windows

Practical Applications

实际应用

Application 1: FPSO Preliminary Design

应用1:FPSO初步设计

yaml
fpso_design:
  vessel:
    hull:
      type: "conversion"  # or "newbuild"
      length_pp: 320  # m
      beam: 58  # m
      depth: 32  # m
      draft_design: 22  # m

    capacity:
      oil_storage: 2000000  # barrels
      production: 100000  # bopd
      water_injection: 200000  # bwpd

  topsides:
    modules:
      - production_manifold
      - separation
      - gas_compression
      - water_injection
      - utilities
    weight: 25000  # tonnes

  mooring:
    type: "spread"
    lines: 12
    configuration: "3x4"  # 3 bundles, 4 lines each

  design_codes:
    - ABS MODU
    - API RP 2FPS
    - DNV-OS-C103
yaml
fpso_design:
  vessel:
    hull:
      type: "conversion"  # or "newbuild"
      length_pp: 320  # m
      beam: 58  # m
      depth: 32  # m
      draft_design: 22  # m

    capacity:
      oil_storage: 2000000  # barrels
      production: 100000  # bopd
      water_injection: 200000  # bwpd

  topsides:
    modules:
      - production_manifold
      - separation
      - gas_compression
      - water_injection
      - utilities
    weight: 25000  # tonnes

  mooring:
    type: "spread"
    lines: 12
    configuration: "3x4"  # 3 bundles, 4 lines each

  design_codes:
    - ABS MODU
    - API RP 2FPS
    - DNV-OS-C103

Application 2: Environmental Load Calculation

应用2:环境载荷计算

python
def calculate_total_environmental_load(
    vessel_data: dict,
    environment: dict
) -> dict:
    """
    Calculate combined wind, wave, and current loads.

    Args:
        vessel_data: Vessel dimensions and coefficients
        environment: Environmental parameters

    Returns:
        Total forces and moments
    """
    import numpy as np

    # Wind force
    rho_air = 1.225  # kg/m³
    V_wind = environment['wind_speed']
    A_projected = vessel_data['frontal_area']
    Cd_wind = vessel_data['wind_drag_coef']
    F_wind = 0.5 * rho_air * V_wind**2 * Cd_wind * A_projected / 1000  # kN

    # Wave drift force (simplified)
    rho_water = 1025  # kg/m³
    Hs = environment['wave_Hs']
    F_wave_drift = 0.5 * rho_water * 9.81 * Hs**2 * vessel_data['waterplane_area'] / 1000

    # Current force
    V_current = environment['current_speed']
    A_underwater = vessel_data['underwater_area']
    Cd_current = vessel_data['current_drag_coef']
    F_current = 0.5 * rho_water * V_current**2 * Cd_current * A_underwater / 1000

    # Total horizontal force
    theta_wind = np.radians(environment['wind_direction'])
    theta_wave = np.radians(environment['wave_direction'])
    theta_current = np.radians(environment['current_direction'])

    Fx = (F_wind * np.cos(theta_wind) +
          F_wave_drift * np.cos(theta_wave) +
          F_current * np.cos(theta_current))

    Fy = (F_wind * np.sin(theta_wind) +
          F_wave_drift * np.sin(theta_wave) +
          F_current * np.sin(theta_current))

    return {
        'Fx_kN': Fx,
        'Fy_kN': Fy,
        'F_total_kN': np.sqrt(Fx**2 + Fy**2),
        'direction_deg': np.degrees(np.arctan2(Fy, Fx))
    }
python
def calculate_total_environmental_load(
    vessel_data: dict,
    environment: dict
) -> dict:
    """
    Calculate combined wind, wave, and current loads.

    Args:
        vessel_data: Vessel dimensions and coefficients
        environment: Environmental parameters

    Returns:
        Total forces and moments
    """
    import numpy as np

    # Wind force
    rho_air = 1.225  # kg/m³
    V_wind = environment['wind_speed']
    A_projected = vessel_data['frontal_area']
    Cd_wind = vessel_data['wind_drag_coef']
    F_wind = 0.5 * rho_air * V_wind**2 * Cd_wind * A_projected / 1000  # kN

    # Wave drift force (simplified)
    rho_water = 1025  # kg/m³
    Hs = environment['wave_Hs']
    F_wave_drift = 0.5 * rho_water * 9.81 * Hs**2 * vessel_data['waterplane_area'] / 1000

    # Current force
    V_current = environment['current_speed']
    A_underwater = vessel_data['underwater_area']
    Cd_current = vessel_data['current_drag_coef']
    F_current = 0.5 * rho_water * V_current**2 * Cd_current * A_underwater / 1000

    # Total horizontal force
    theta_wind = np.radians(environment['wind_direction'])
    theta_wave = np.radians(environment['wave_direction'])
    theta_current = np.radians(environment['current_direction'])

    Fx = (F_wind * np.cos(theta_wind) +
          F_wave_drift * np.cos(theta_wave) +
          F_current * np.cos(theta_current))

    Fy = (F_wind * np.sin(theta_wind) +
          F_wave_drift * np.sin(theta_wave) +
          F_current * np.sin(theta_current))

    return {
        'Fx_kN': Fx,
        'Fy_kN': Fy,
        'F_total_kN': np.sqrt(Fx**2 + Fy**2),
        'direction_deg': np.degrees(np.arctan2(Fy, Fx))
    }

Key Calculations

核心计算

1. Buoyancy and Stability

1. 浮力与稳性

python
def calculate_metacentric_height(
    displacement: float,  # tonnes
    waterplane_area: float,  # m²
    center_of_buoyancy_height: float,  # m
    center_of_gravity_height: float  # m
) -> float:
    """
    Calculate metacentric height (GM) for stability.

    GM = KB + BM - KG

    Where:
    - KB = Center of buoyancy above keel
    - BM = Metacentric radius = I/V
    - KG = Center of gravity above keel

    Args:
        displacement: Vessel displacement
        waterplane_area: Area at waterline
        center_of_buoyancy_height: KB
        center_of_gravity_height: KG

    Returns:
        Metacentric height in meters
    """
    rho = 1.025  # t/m³
    volume = displacement / rho

    # Second moment of area (simplified for rectangular waterplane)
    I = waterplane_area**1.5 / 12  # Approximation

    # Metacentric radius
    BM = I / volume

    # Metacentric height
    GM = center_of_buoyancy_height + BM - center_of_gravity_height

    return GM
python
def calculate_metacentric_height(
    displacement: float,  # tonnes
    waterplane_area: float,  # m²
    center_of_buoyancy_height: float,  # m
    center_of_gravity_height: float  # m
) -> float:
    """
    Calculate metacentric height (GM) for stability.

    GM = KB + BM - KG

    Where:
    - KB = Center of buoyancy above keel
    - BM = Metacentric radius = I/V
    - KG = Center of gravity above keel

    Args:
        displacement: Vessel displacement
        waterplane_area: Area at waterline
        center_of_buoyancy_height: KB
        center_of_gravity_height: KG

    Returns:
        Metacentric height in meters
    """
    rho = 1.025  # t/m³
    volume = displacement / rho

    # Second moment of area (simplified for rectangular waterplane)
    I = waterplane_area**1.5 / 12  # Approximation

    # Metacentric radius
    BM = I / volume

    # Metacentric height
    GM = center_of_buoyancy_height + BM - center_of_gravity_height

    return GM

2. Riser Stress

2. 立管应力

python
def calculate_riser_stress(
    top_tension: float,  # kN
    weight_per_length: float,  # kg/m
    water_depth: float,  # m
    diameter: float,  # mm
    wall_thickness: float  # mm
) -> dict:
    """
    Calculate riser stresses.

    Args:
        top_tension: Top tension
        weight_per_length: Riser weight in water
        water_depth: Water depth
        diameter: Outer diameter
        wall_thickness: Wall thickness

    Returns:
        Stress components
    """
    # Cross-sectional area
    D_outer = diameter / 1000  # Convert to m
    D_inner = D_outer - 2 * wall_thickness / 1000
    A = np.pi * (D_outer**2 - D_inner**2) / 4  # m²

    # Effective tension at bottom
    w = weight_per_length * 9.81 / 1000  # kN/m
    bottom_tension = top_tension - w * water_depth

    # Axial stress (top)
    sigma_axial_top = top_tension * 1000 / (A * 1e6)  # MPa

    # Axial stress (bottom)
    sigma_axial_bottom = bottom_tension * 1000 / (A * 1e6)  # MPa

    return {
        'top_stress_MPa': sigma_axial_top,
        'bottom_stress_MPa': sigma_axial_bottom,
        'bottom_tension_kN': bottom_tension
    }
python
def calculate_riser_stress(
    top_tension: float,  # kN
    weight_per_length: float,  # kg/m
    water_depth: float,  # m
    diameter: float,  # mm
    wall_thickness: float  # mm
) -> dict:
    """
    Calculate riser stresses.

    Args:
        top_tension: Top tension
        weight_per_length: Riser weight in water
        water_depth: Water depth
        diameter: Outer diameter
        wall_thickness: Wall thickness

    Returns:
        Stress components
    """
    # Cross-sectional area
    D_outer = diameter / 1000  # Convert to m
    D_inner = D_outer - 2 * wall_thickness / 1000
    A = np.pi * (D_outer**2 - D_inner**2) / 4  # m²

    # Effective tension at bottom
    w = weight_per_length * 9.81 / 1000  # kN/m
    bottom_tension = top_tension - w * water_depth

    # Axial stress (top)
    sigma_axial_top = top_tension * 1000 / (A * 1e6)  # MPa

    # Axial stress (bottom)
    sigma_axial_bottom = bottom_tension * 1000 / (A * 1e6)  # MPa

    return {
        'top_stress_MPa': sigma_axial_top,
        'bottom_stress_MPa': sigma_axial_bottom,
        'bottom_tension_kN': bottom_tension
    }

Design Process

设计流程

Typical Project Phases:

典型项目阶段:

  1. Feasibility Study
    • Concept selection
    • Preliminary sizing
    • Cost estimation
  2. FEED (Front End Engineering Design)
    • Detailed concept
    • Specifications
    • Major equipment selection
  3. Detailed Engineering
    • Construction drawings
    • Procurement
    • Fabrication specifications
  4. Fabrication & Installation
    • Yard fabrication
    • Loadout and seafastening
    • Offshore installation
  5. Commissioning & Operations
    • System testing
    • Production startup
    • Life of field operations
  1. 可行性研究
    • 方案选型
    • 初步尺寸设计
    • 成本估算
  2. FEED(前端工程设计)
    • 详细方案设计
    • 技术规格书
    • 主要设备选型
  3. 详细工程设计
    • 施工图纸
    • 采购
    • 制造规格书
  4. 制造与安装
    • 船厂制造
    • 装船与固定
    • 海上安装
  5. 调试与运营
    • 系统测试
    • 投产启动
    • 油田全生命周期运营

Resources

参考资源


Use this skill for all marine and offshore engineering design decisions in DigitalModel!

在DigitalModel中,所有海洋与海上工程设计决策均可使用本技能!