From 7613e04a014205927608c35d4300fb1840d1d8b2 Mon Sep 17 00:00:00 2001 From: Ryoichi Ando Date: Tue, 31 Dec 2024 19:01:36 +0900 Subject: [PATCH] frontend bug fix --- examples/friction.ipynb | 2 +- examples/hang.ipynb | 14 +++--- frontend/_parse_.py | 48 +++++++++++++------ frontend/_session_.py | 5 +- src/args.rs | 4 +- src/builder.rs | 4 +- src/cpp/data.hpp | 4 +- src/cpp/energy/energy.cu | 12 ++--- .../{aerial_damper.hpp => air_damper.hpp} | 16 +++---- src/data.rs | 4 +- 10 files changed, 65 insertions(+), 48 deletions(-) rename src/cpp/energy/model/{aerial_damper.hpp => air_damper.hpp} (77%) diff --git a/examples/friction.ipynb b/examples/friction.ipynb index 8019137..061c67c 100644 --- a/examples/friction.ipynb +++ b/examples/friction.ipynb @@ -26,7 +26,7 @@ "scene.add(\"slope\").rotate(-deg,\"z\").pin()\n", "\n", "fixed = scene.build().report()\n", - "fixed.preview();" + "fixed.preview()" ] }, { diff --git a/examples/hang.ipynb b/examples/hang.ipynb index a7da557..7f0f880 100644 --- a/examples/hang.ipynb +++ b/examples/hang.ipynb @@ -36,7 +36,7 @@ "param = app.session.param().set(\"dt\",0.001)\n", "param.set(\"strain-limit-eps\", 0.005).set(\"strain-limit-tau\", 0.005)\n", "param.set(\"frames\",200)\n", - "param.dyn(\"gravity\").time(1).hold().time(1+jitter_time).change(9.8).time(2.0).change(-9.8);" + "param.dyn(\"gravity\").time(1).hold().time(1+jitter_time).change(9.8).time(2.0).change(-9.8)" ] }, { @@ -47,8 +47,8 @@ "outputs": [], "source": [ "session = app.session.create(\"two-pins-hang\").init(fixed)\n", - "session.start(param).preview();\n", - "session.stream();" + "session.start(param).preview()\n", + "session.stream()" ] }, { @@ -59,7 +59,7 @@ "outputs": [], "source": [ "# run this cell after sufficnt frames are simulated\n", - "session.animate();" + "session.animate()" ] }, { @@ -105,8 +105,8 @@ "param.set(\"dt\",0.1).set(\"enable-retry\",True)\n", "\n", "session = app.session.create(\"two-pins-hang-dt-01\").init(fixed)\n", - "session.start(param).preview();\n", - "session.stream();" + "session.start(param).preview()\n", + "session.stream()" ] }, { @@ -117,7 +117,7 @@ "outputs": [], "source": [ "# run this cell after sufficnt frames are simulated\n", - "session.animate();" + "session.animate()" ] }, { diff --git a/frontend/_parse_.py b/frontend/_parse_.py index d890c82..3ed3a23 100644 --- a/frontend/_parse_.py +++ b/frontend/_parse_.py @@ -12,33 +12,47 @@ def get_logging_docstrings(root: str) -> dict[str, dict[str, str]]: desc = "" description_mode = False - def register(name): - nonlocal par_name + def clear(): nonlocal doc nonlocal desc nonlocal description_mode - if desc: - doc["Description"] = desc - if par_name: - doc["filename"] = f"{par_name}.{name}.out" - else: - doc["filename"] = f"{name}.out" - if "Map" in doc: - name = doc["Map"] - del doc["Map"] + doc = {} desc = "" description_mode = False - result[name.replace("_", "-")] = doc.copy() + + def register(name): + nonlocal par_name + nonlocal doc + nonlocal desc + nonlocal description_mode + + if "Name" in doc.keys(): + if desc: + doc["Description"] = desc + if par_name: + doc["filename"] = f"{par_name}.{name}.out" + else: + doc["filename"] = f"{name}.out" + if "Map" in doc: + name = doc["Map"] + del doc["Map"] + result[name.replace("_", "-")] = doc.copy() + clear() def extract_name(line): start = line.find('"') + 1 end = line.find('"', start) - return line[start:end].replace(" ", "_") + name = line[start:end].replace(" ", "_") + return name def parse_line(line: str): nonlocal par_name nonlocal description_mode nonlocal desc + nonlocal doc + + if line.strip() == "": + clear() skip_lables = ["File", "Author", "License", "https"] if line.startswith("//"): @@ -58,7 +72,10 @@ def parse_line(line: str): content = fields[1].strip() doc[label] = content elif line.startswith("SimpleLog logging"): - par_name = extract_name(line) + par_name = "" + name = extract_name(line) + register(name) + par_name = name elif line.startswith("/*== push"): register(extract_name(line)) elif "logging.push(" in line: @@ -78,6 +95,7 @@ def parse_line(line: str): if "#include" not in line: parse_line(line) + result = dict(sorted(result.items())) return result @@ -197,4 +215,6 @@ def clear_doc(): curr_attributes = [] else: curr_attributes = [] + + result = dict(sorted(result.items())) return result diff --git a/frontend/_session_.py b/frontend/_session_.py index 60284ca..e383fe2 100755 --- a/frontend/_session_.py +++ b/frontend/_session_.py @@ -539,7 +539,6 @@ def float_or_int(var): entries.append([float_or_int(entry[0]), float_or_int(entry[1])]) return entries else: - print(f"File {path} does not exist") return None def number(self, name: str): @@ -889,9 +888,7 @@ def convert_time(time) -> str: if live_update and is_running(): def update_dataframe(table, curr_frame): - time_per_frame = convert_time( - self.get.log.number("time-per-frame") - ) + time_per_frame = convert_time(self.get.log.number("time-per-frame")) time_per_step = convert_time(self.get.log.number("time-per-step")) n_contact = convert_integer(self.get.log.number("num-contact")) n_newton = convert_integer(self.get.log.number("newton-steps")) diff --git a/src/args.rs b/src/args.rs index 839ec07..2eb58be 100644 --- a/src/args.rs +++ b/src/args.rs @@ -63,7 +63,7 @@ pub struct Args { // When an object is moving in the air, both drag and lift forces are computed. // This value controls the ratio of the tangential friction to the normal friction. #[clap(long, default_value_t = 0.2)] - pub aerial_friction: f32, + pub air_friction: f32, // Name: Extended Line Search Maximum Time // Recommended Range: 1.25 to 1.75 @@ -339,7 +339,7 @@ pub struct Args { // Description: // Per-vertex air dragging coefficient. #[clap(long, default_value_t = 0.0)] - pub isotropic_aerial_friction: f32, + pub isotropic_air_friction: f32, // Name: Bend Stiffness for Shells // Recommended Range: 0.0 to 1e2 diff --git a/src/builder.rs b/src/builder.rs index 7f76ff5..ba4f678 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -329,7 +329,7 @@ pub fn make_param(args: &Args) -> data::ParamSet { data::ParamSet { time: 0.0, fitting: false, - aerial_friction: args.aerial_friction, + air_friction: args.air_friction, air_density: args.air_density, strain_limit_tau, strain_limit_eps, @@ -355,7 +355,7 @@ pub fn make_param(args: &Args) -> data::ParamSet { eiganalysis_eps: args.eiganalysis_eps, friction: args.friction, friction_eps: args.friction_eps, - isotropic_aerial_friction: args.isotropic_aerial_friction, + isotropic_air_friction: args.isotropic_air_friction, gravity: Vec3f::new(0.0, args.gravity, 0.0), wind, model_shell: match args.model_shell.as_str() { diff --git a/src/cpp/data.hpp b/src/cpp/data.hpp index c3b17a8..25298b7 100644 --- a/src/cpp/data.hpp +++ b/src/cpp/data.hpp @@ -207,7 +207,7 @@ struct Constraint { struct ParamSet { double time; bool fitting; - float aerial_friction; + float air_friction; float air_density; float strain_limit_tau; float strain_limit_eps; @@ -233,7 +233,7 @@ struct ParamSet { float eiganalysis_eps; float friction; float friction_eps; - float isotropic_aerial_friction; + float isotropic_air_friction; Vec3f gravity; Vec3f wind; Model model_shell; diff --git a/src/cpp/energy/energy.cu b/src/cpp/energy/energy.cu index b549b77..7c0719a 100644 --- a/src/cpp/energy/energy.cu +++ b/src/cpp/energy/energy.cu @@ -8,7 +8,7 @@ #include "../eigenanalysis/eigenanalysis.hpp" #include "../utility/dispatcher.hpp" #include "../utility/utility.hpp" -#include "model/aerial_damper.hpp" +#include "model/air_damper.hpp" #include "model/arap.hpp" #include "model/baraffwitkin.hpp" #include "model/dihedral_angle.hpp" @@ -39,9 +39,9 @@ embed_vertex_force_hessian(const DataSet &data, const Vec &eval_x, Mat3x3f H = Mat3x3f::Zero(); if (normal.isZero() == false && param.air_density) { f += area * param.air_density * - aerial_damper::face_gradient(dt, y, x, normal, wind, param); + air_damper::face_gradient(dt, y, x, normal, wind, param); H += area * param.air_density * - aerial_damper::face_hessian(dt, normal, param); + air_damper::face_hessian(dt, normal, param); } bool pulled(false); for (unsigned j = 0; j < data.constraint.pull.size; ++j) { @@ -58,10 +58,10 @@ embed_vertex_force_hessian(const DataSet &data, const Vec &eval_x, f += mass * momentum::gradient(dt, y, target[i]); H += mass * momentum::hessian(dt); } - if (param.isotropic_aerial_friction) { - f += param.isotropic_aerial_friction * (y - x) / (dt * dt); + if (param.isotropic_air_friction) { + f += param.isotropic_air_friction * (y - x) / (dt * dt); H += - (param.isotropic_aerial_friction / (dt * dt)) * Mat3x3f::Identity(); + (param.isotropic_air_friction / (dt * dt)) * Mat3x3f::Identity(); } if (param.fix_xz && y[1] > param.fix_xz) { float t = fmin(1.0f, y[1] - param.fix_xz); diff --git a/src/cpp/energy/model/aerial_damper.hpp b/src/cpp/energy/model/air_damper.hpp similarity index 77% rename from src/cpp/energy/model/aerial_damper.hpp rename to src/cpp/energy/model/air_damper.hpp index 8525149..671c153 100644 --- a/src/cpp/energy/model/aerial_damper.hpp +++ b/src/cpp/energy/model/air_damper.hpp @@ -1,13 +1,13 @@ -// File: aerial_damper.hpp +// File: air_damper.hpp // Author: Ryoichi Ando (ryoichi.ando@zozo.com) // License: Apache v2.0 -#ifndef AERIAL_DAMP_HPP -#define AERIAL_DAMP_HPP +#ifndef air_DAMP_HPP +#define air_DAMP_HPP #include "../../data.hpp" -namespace aerial_damper { +namespace air_damper { __device__ Mat3x3f get_proj_op(const Vec3f &normal) { return Mat3x3f::Identity() - normal * normal.transpose(); @@ -20,7 +20,7 @@ __device__ float face_energy(float dt, const Vec3f &x1, const Vec3f &x0, Mat3x3f P = get_proj_op(normal); float f = normal.dot(x1 - z); Vec3f g = P * (x1 - z); - return 0.5f * (f * f + param.aerial_friction * g.squaredNorm()) / (dt * dt); + return 0.5f * (f * f + param.air_friction * g.squaredNorm()) / (dt * dt); } __device__ Vec3f face_gradient(float dt, const Vec3f &x1, const Vec3f &x0, @@ -29,16 +29,16 @@ __device__ Vec3f face_gradient(float dt, const Vec3f &x1, const Vec3f &x0, Vec3f z = x0 + dt * wind; Mat3x3f P = get_proj_op(normal); return normal * normal.dot(x1 - z) / (dt * dt) + - param.aerial_friction * P * (x1 - z) / (dt * dt); + param.air_friction * P * (x1 - z) / (dt * dt); } __device__ Mat3x3f face_hessian(float dt, const Vec3f &normal, const ParamSet ¶m) { Mat3x3f P = get_proj_op(normal); return normal * normal.transpose() / (dt * dt) + - param.aerial_friction * P / (dt * dt); + param.air_friction * P / (dt * dt); } -} // namespace aerial_damper +} // namespace air_damper #endif diff --git a/src/data.rs b/src/data.rs index 70e6b12..defede5 100644 --- a/src/data.rs +++ b/src/data.rs @@ -281,7 +281,7 @@ pub struct Constraint { pub struct ParamSet { pub time: f64, pub fitting: bool, - pub aerial_friction: f32, + pub air_friction: f32, pub air_density: f32, pub strain_limit_tau: f32, pub strain_limit_eps: f32, @@ -307,7 +307,7 @@ pub struct ParamSet { pub eiganalysis_eps: f32, pub friction: f32, pub friction_eps: f32, - pub isotropic_aerial_friction: f32, + pub isotropic_air_friction: f32, pub gravity: Vec3f, pub wind: Vec3f, pub model_shell: Model,