uff-relax 1.0.7

A high-performance, parallelized molecular structure optimizer using the Universal Force Field (UFF).
Documentation
# uff-relax への途中キャンセル機能追加の提案

## 1. 目的
ブラウザ(Wasm)環境等のインタラクティブなUIにおいて、長時間かかる最適化計算(特に全系Relaxation)をユーザーが任意のタイミングで中断できるようにし、アプリケーションの応答性を向上させる。

## 2. 変更内容の概要
`UffOptimizerb 構造体にスレッドセーフなキャンセル・フラグ(`AtomicBoolb)を保持する機能を追加し、計算ループの各ステップでその状態を監視する。

## 3. 具体的な実装仕様(案)

### A. 構造体の変更 (`src/optimizer.rsb)
`UffOptimizerb にフラグ保持用のフィールドを追加します。
```rust
pub struct UffOptimizer {
    // ... 既存のフィールド ...
    pub cancel_flag: Option<std::sync::Arc<std::sync::atomic::AtomicBool>>,
}
```

### B. ビルダーメソッドの追加
外部からフラグを注入するためのメソッドを追加します。
```rust
impl UffOptimizer {
    pub fn with_cancel_flag(mut self, flag: std::sync::Arc<std::sync::atomic::AtomicBool>) -> Self {
        self.cancel_flag = Some(flag);
        self
    }
}
```

### C. 計算ループ内でのチェック (`optimizeb および `optimize_asyncb)
`for iter in 0..self.max_iterations { ... }` ループの冒頭に以下のチェックを挿入します。
```rust
if let Some(ref cancel) = self.cancel_flag {
    if cancel.load(std::sync::atomic::Ordering::SeqCst) {
        tracing::info!("[Builder] Optimization cancelled by user.");
        break; // ループを中断して正常終了またはフッター表示へ
    }
}
```

## 4. 期待される動作
*   フラグが `trueb に書き換えられた直後の Iteration ステップでループが終了する。
*   `optimize_asyncb の場合、`yield_nowb と組み合わせることで、ブラウザのメインスレッドをブロックし続けることなく、即座にキャンセル処理が反映される。
*   既存の API 呼び出し(フラグを渡さない場合)には影響を与えない(後方互換性の維持)。